Pull to refresh
1
0
Send message

Auth service без библиотек

Level of difficultyMedium
Reading time8 min
Views7.9K

О чем эта статья: статья посвящена схемам регистрации, аутентификации, авторизации пользователей в веб приложениях, смене паролей, отзыве токенов, и т. п. Мы также рассмотрим, как организовать хранение данных, обсудим, что такое JWT, коротко поговорим о «сервисе для отправки email»

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

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

Читать далее
Total votes 12: ↑12 and ↓0+13
Comments8

Строки в игровых движках

Level of difficultyEasy
Reading time15 min
Views11K

Исторически потребность в строках и их использование в игровых движках было довольно ограниченое, кроме, разве что, локализации ресурсов, где была необходимость полноценной поддержки чего-то отличного от набора ASCII символов. Но, при желании, даже эти ресуры разработчики умудрялись упаковать в доступные 200 элементов набора ASCII, а учитывая что игра обычно запускается только в одной локали, то никаких потребностей в конвертации не было. Но есть тут и отличия от стандарта, стараниями Sony практически с начала нулевых, еще до 20 стандарта разработчикам игр были доступны несколько моделей символьных литералов. Стандартый ASCII на PS1 и частичная поддержка Unicode (ISO 10646), с выпуском сдк для второй плойки добавили поддержку UTF-16 и UTF-32, а после выхода PS3 добавили поддержку UTF-8.

strcpy(destination, source);
Total votes 20: ↑20 and ↓0+24
Comments11

REDIS: такой простой и такой сложный

Level of difficultyMedium
Reading time10 min
Views22K

Меня зовут Андрей Комягин, я СТО компании STM Labs. Мы занимаемся разработкой очень больших распределённых высоконагруженных систем для различных отраслей и в своей работе широко используем open-source решения, в том числе СУБД Redis. Недавно я подробно рассказывал об этой системе на конференции Saint HighLoad++, а теперь с удовольствием поделюсь основной информацией с читателями Хабра. Итак, поехали.

Читать далее
Total votes 50: ↑49 and ↓1+60
Comments28

gRPCurl — curl для gRPC-серверов

Reading time4 min
Views29K


gRPC — современный фреймвок для удалённого вызова процедур, разработанный Google в 2015 году. Им начинает пользоваться всё большее количество компаний по всему миру. В России, например, это Яндекс. gRPCurl — инструмент командной строки, написанный на Go. Он разработан компанией FullStory и позволяет взаимодействовать с gRPC серверами. В этой статье будут раскрыты особенности проекта и описаны основные кейсы для его применения.
Читать дальше →
Total votes 24: ↑23 and ↓1+30
Comments7

Апи версионирование по-взрослому

Level of difficultyMedium
Reading time8 min
Views7.2K

Мы все любим пробовать новые инструменты, но ненавидим их поддерживать и обновлять. Это касается всего: операционных систем, приложений, API, пакетов Linux. Больно, когда наш код перестает работать из-за обновления, и вдвойне больно, когда обновление было инициировано не нами.

В разработке API вы рискуете сломать код ваших пользователей с каждым новым обновлением. Если API -- ваш основной продукт, то обновления будут ещё более пугающими.

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

Я расскажу на нашем примере, насколько глубока кроличья нора и как сильно можно упороться на пути к идеальному версионированию.

Читать далее
Total votes 12: ↑11 and ↓1+14
Comments37

Антипаттерны в процессе разработки

Level of difficultyEasy
Reading time10 min
Views6.3K

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

Всё это сподвигло нас к анализу накопленного опыта и имеющихся материалов в области процессов разработки с акцентом на взаимоотношения в коллективах. Мы — это Евгений Филимонов и Андрей Клюйков, инженеры по тестированию КОМПАС-3D.

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

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

Читать далее
Total votes 14: ↑13 and ↓1+16
Comments4

Распределенные транзакции для самых маленьких

Level of difficultyEasy
Reading time8 min
Views13K

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

Читать далее
Total votes 18: ↑14 and ↓4+15
Comments10

Запускаем PostgreSQL в Docker: от простого к сложному

Level of difficultyEasy
Reading time12 min
Views539K

О простых и продвинутых способах запуска PostgreSQL в Docker: добавляем healthcheck, ставим на мониторинг, настраиваем параметры.

Читать далее
Total votes 34: ↑32 and ↓2+35
Comments39

Анонимность; При каких условиях возможен реванш?

Level of difficultyEasy
Reading time13 min
Views5.7K

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

Читать далее
Total votes 13: ↑11 and ↓2+11
Comments20

Микропроцессоры и Инопланетяне

Level of difficultyEasy
Reading time12 min
Views10K

3 июля в ТАСС состоялась пресс-конференция, посвященная открытию исходных кодов некоторой части системного ПО для микропроцессоров Эльбрус. Само по себе событие сложно не воспринимать положительно, вне зависимости от цели и полезности того, что было выложено на публику. Но вот выступления некоторых участников пресс-конференции, носили, не побоюсь этого слова, инопланетный характер. И если представитель Минпромторга и исполнительный директор ассоциации разработчиков программных продуктов «Отечественный софт» не выходили за рамки присущего такого рода мероприятиям дежурных заявлений в духе «за всё хорошее, против всего плохого, углубить и расширить», то люди, очень похожие на представителя МЦСТ Константина Трушкина и главу ассоциации АРПЭ Ивана Покровского, безусловно, заинтересовали бы агентов K и J. Но т.к. в эпоху санкций и ограничений люди в чёрном не смогут прилететь в Москву, придётся разоблачать пришельцев самостоятельно.

Читать далее
Total votes 53: ↑40 and ↓13+38
Comments70

Тысяча и одна библиотека С++

Reading time65 min
Views28K

В жизни каждого программиста С++ рано или поздно возникает задача, которую кто-либо уже решил. Однако найти это решение бывает очень непросто в силу разных причин: оно недостаточно разрекламировано, либо имеет нечеткую документацию, или возникает проблема языкового барьера, ну, или поисковики просто плохо ищут).

Столкнувшись много раз подряд с тем, что найти что-то толковое довольно непросто, я решил попробовать распутать это узел и предложить для русскоязычных читателей свой справочник классных библиотек на С++. Я исходил из этого источника. Это очень многогранный и объемный список библиотек языка С++, но, скажем так, у меня были к нему вопросы. Потому я сделал перевод, затем значительно улучшил его в плане содержания (далее объясню, как, почему и зачем). На выходе получилось около 1000 библиотек. Как в сказке). Они, конечно, не покрывают все возможные задачи и предметные области, но поверьте, они затрагивают действительно многое.

Прикоснуться к сокровищнице языка С++
Total votes 82: ↑81 and ↓1+92
Comments23

Как американская коррупция превратила физика-ядерщика в быдло-кодера

Level of difficultyEasy
Reading time17 min
Views129K

Это история из цикла «как войти в IT», написанная старпером, ветераном броуновского движения, который помнит динозавров. Поэтому его опыт вхождения в ИТ никому не пригодится, но представляет интерес с точки зрения истории.  

Также поделюсь своим мыслями об интерфейсе инженерного ПО. Участвуя в разработках различного ПО, предназначенного для ускорения разработки сложных систем, периодически приходится выслушивать жалобы от новых пользователей на «кривой и устаревший» интерфейс ПО. Однако инженеры, погруженные в проблемы проектирования реальных железок, вообще не задают нам таких вопросов, либо потому, что уже искривили свои руки о кривой интерфейс, либо им это вообще неважно. Более того, есть два примера, когда реальные высокопрофессиональные инженеры в своей области предъявляли претензии обратного свойства, и первая версия кривая версия GUI была удобнее, а вот улучшения делали какие-то полупокеры. 

К написанию данного текста меня подтолкнула беседа с одним из крутых разрабов из «жирной» конторы, с которым мы пересеклись на яхте в Средиземном море. Узнав, что я тоже из Бауманки, и у меня свой бизнес, он заинтересовался и выспрашивал. Как я смог начать бизнес на софте, почему не пошел в большую контору, типа Yandex, Сбер и прочие. У него тоже знакомство с софтом началось как создание собственной разработки по анализу результатов металлургических испытаний в лаборатории, но закончилось работой прогером по найму. Попивая вино на яхте где-то между Турцией и Грецией в 2023 году, он предположил, что, возможно, если бы он продолжал писать софт для металлургических исследований, то, наверное, сейчас мог плавать на своей яхте, а не арендованной, и не около Турции, а на Карибах (но это не точно). А поскольку фарш невозможно провернуть назад, я решил описать свою историю успеха, так как она забавна и поучительна.

Читать далее
Total votes 382: ↑367 and ↓15+417
Comments281

Книга: «Антипаттерны SQL. Как избежать ловушек при работе с базами данных»

Reading time10 min
Views17K
image Привет, Хаброжители!

Язык SQL необходим для работы со структурированными данными. Программисты, прекрасно знающие свой любимый язык (Java, Python или Go), не могут разбираться во всем, и часто не являются экспертами в SQL. Это приводит к появлению антипаттернов — решений, которые на первый взгляд кажутся правильными, но со временем создают все больше проблем.

Научитесь выявлять и обходить многие из этих распространенных ловушек! Проведите рефакторинг унаследованного кошмара и превратите его в жизнеспособную модель данных!

Примеры SQL-кода основаны на версии MySQL 8.0, но в тексте также упоминаются другие популярные РСУБД. В примерах кода используется Python 3.9+ или Ruby 2.7+.
Читать дальше →
Total votes 6: ↑6 and ↓0+11
Comments15

Как могли взломать СДЭК. Уроки, которые нужно усвоить каждому

Reading time7 min
Views35K

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

Желаем ИТ-команде СДЭК скорейшего восстановления работы в полном объеме. 

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

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

Именно этому и посвящен наш текст
Total votes 21: ↑12 and ↓9+10
Comments52

Вы пожалеете об использовании естественных ключей

Level of difficultyEasy
Reading time5 min
Views20K

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

Я немного занервничал, потому что покупал машину с рук, и внезапно задался вопросом, действительно ли всё так, как я думал. Неужели я непреднамеренно купил краденную машину?

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

Читать далее
Total votes 45: ↑42 and ↓3+55
Comments126

Финансовая арифметика в PostgreSQL

Level of difficultyEasy
Reading time5 min
Views10K

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

Читать далее
Total votes 30: ↑26 and ↓4+28
Comments53

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

Reading time11 min
Views16K

«Баннерная крутилка» —  один из самых высоконагруженных сервисов в Яндексе. Он умеет переживать 700 тысяч RPS, а иногда и больше. Каждый раз, когда приходит запрос, крутилка должна просмотреть базу из миллиарда документов и выбрать из них самые релевантные для пользователя. При этом выдерживаются весьма жесткие временные рамки: 99% всех запросов обрабатываются менее чем за 200 миллисекунд.

Какими принципами стоит руководствоваться при построении подобных высоконагруженных систем? Как устроены стадии отбора документов? Какое участие в ранжировании принимает ML? Обо всём этом на недавнем мероприятии для разработчиков в Ереване рассказал Артём Ваншулин, руководитель разработки ранжирования в команде баннерной системы. Сегодня мы делимся с сообществом текстовой версией его доклада. Передаём ему слово.

Читать далее
Total votes 33: ↑29 and ↓4+35
Comments4

Тестирование Rust

Reading time8 min
Views6.3K


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

Исходная проблема


В течение многих лет работы с JVM мы активно применяли внедрение зависимостей. Даже если вы не используете фреймворк, внедрение зависимостей помогает разделять компоненты. Вот простой пример:

class Car(private val engine: Engine) {

    fun start() {
        engine.start()
    }
}

interface Engine {
    fun start()
}

class CarEngine(): Engine {
    override fun start() = ...
}

class TestEngine(): Engine {
    override fun start() = ...
}

В обычном коде:

val car = Car(CarEngine())

В тестовом коде:

val dummy = Car(TestEngine())

Внедрение зависимостей нужно для исполнения разных фрагментов кода в соответствии с их контекстом.
Читать дальше →
Total votes 35: ↑31 and ↓4+35
Comments8

Все про композитинг в X11 | Linux

Level of difficultyMedium
Reading time13 min
Views7.1K

Приветствую, читатели хабра! Вы когда-нибудь задумывались над тем, что скрывается за красотой и динамичностью вашего рабочего стола? Какие компоненты реализовывают анимации и различные графические эффекты: блюр, тень, скругления, прозрачность? В X11 есть одна очень интересная программная единица - композитор. В этой статье мы получим общее понимание того, что это такое, как реализовано и для чего используется. Также, немного поговорим о том, как Xorg хранит информацию для отрисовки, затронем front/back буферы и узнаем, как компоненты рабочего стола обмениваются информацией между собой.

Читать далее
Total votes 24: ↑24 and ↓0+28
Comments15

Спецификация уникальных идентификаторов UUIDv7 для ключей баз данных и распределенных систем по новому стандарту RFC9562

Level of difficultyMedium
Reading time14 min
Views7.3K

Долгожданный стандарт RFC9562 "Universally Unique IDentifiers (UUID)" с тремя новыми версиями идентификаторов UUID (6, 7 и 8) вместо малопригодного RFC4122 наконец-то вступил в силу. Я участвовал в разработке нового стандарта. Обзор стандарта можно посмотреть в статье.

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

Сгенерированные UUIDv7 имеют все преимущества UUID и при этом упорядочены по дате и времени создания. Это ускоряет поиск индексов и записей в БД по ключу в формате UUID, значительно упрощает и ускоряет базы данных и распределенные системы. Неупорядоченность значений UUID прежде сдерживала использование UUID в качестве ключей и вынуждала разработчиков выдумывать собственные форматы идентификаторов или довольствоваться последовательными целыми числами в качестве ключей.

Черновик стандарта активно обсуждался на Хабре в апреле 2022 года в комментариях к статье "Встречайте UUID нового поколения для ключей высоконагруженных систем".

Разные участники разработки нового стандарта придерживались различных взглядов, и практически все обсуждавшиеся альтернативные варианты структуры UUIDv7 вошли в стандарт. Поэтому теперь перед разработчиками возникает вопрос, какую из множества возможных спецификаций UUIDv7 реализовывать и применять. Также для массового перехода на UUIDv7 нужна дополнительная функциональность, повышающая привлекательность UUIDv7 для разработчиков и бизнеса.

Предложенная мной ниже спецификация UUIDv7 с дополнительной функциональностью описывает максимально надежный и удобный вариант структуры UUIDv7 для самых сложных и высоконагруженных информационных систем. Функциональность упорядочена по приоритету реализации

Читать далее
Total votes 16: ↑15 and ↓1+16
Comments25

Information

Rating
4,699-th
Registered
Activity

Specialization

Software Developer, Backend Developer
Java
SQL
Hibernate
Docker
Kotlin
RxJava 2
C++