Pull to refresh
1
0
Inessa Matuznaya @Incher

Backend Developer

Send message

Что такое дизайн-токены простыми словами

Level of difficultyEasy
Reading time8 min
Views16K

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

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

Ознакомиться со статьей 👏🏼
Total votes 31: ↑31 and ↓0+31
Comments4

Создаем свой VPN с защищенным от блокировок протоколом AmneziaWG, или WireGuard на максималках

Reading time4 min
Views151K


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

Читать далее
Total votes 91: ↑89 and ↓2+111
Comments123

Как мы поднимаем dev-стэнд(ы) и гоняем полноценные тесты api на каждый коммит

Level of difficultyEasy
Reading time8 min
Views5.8K

Мы в API отказались от большого количества unit-тестов в пользу большого количества интеграционных/системных, чтобы тестировать меньшим количеством кода большее количество функций, а также наблюдать за взаимодействием разных частей системы.

На самом деле мы просто решили писать тесты не на отдельные классы/методы, а на интерфейс api, которым пользуются клиенты - на сервисы этого API. Тестируя их, мы убиваем двух зайцев: проверяем логику работы сервисов api + форматирование результата.

А такое тестирование сопряжено с несколькими проблемами.

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

PHP. Как увеличить потребление памяти в 3 и более раз при работе с массивами

Level of difficultyMedium
Reading time12 min
Views18K

1. Общие сведения.
2. Увеличиваем потребление памяти вдвое.
3. Увеличиваем потребление памяти втрое.
4. Ещё раз увеличиваем потребление памяти на ровном месте.
5. Заключение.

Читать далее
Total votes 43: ↑43 and ↓0+43
Comments56

KeyDB и Redis: в поисках серебряной пули — in-memory replicated DB (Replicated IMDB)

Level of difficultyMedium
Reading time19 min
Views11K

На кластерах клиентов, которые мы обслуживаем, есть как «одноголовые» инсталляции Redis (обычно для кэшей, которые не страшно потерять), так и более отказоустойчивые решения — Redis Sentinel или Redis Cluster. По нашему опыту, во всех трех вариантах можно безболезненно переключиться с Redis на KeyDB и получить прирост производительности. Точнее, избавиться от бутылочного горлышка Redis в одно ядро. Хотя в новых версиях Redis(r) появилась обработка I/O в отдельных тредах, иногда этого бывает недостаточно.

В то же время, если мы хотим использовать отказоустойчивые решениями вроде Sentinel и Cluster, нам понадобится поддержка этих технологий на уровне библиотеки, которую приложение использует для подключения в Redis. Причем лишь немногие библиотеки умеют читать из реплик Redis — в обоих вариантах (Sentinel и Cluster) чтение, как правило, происходит с мастеров. И запись, естественно, тоже происходит в мастеры. 

В итоге у нас есть несколько реплик довольно дорогого in-memory-хранилища, а в рабочем процессе используется только часть из них. Остальные — на подхвате. Хотя в большинстве кейсов операции с in-memory NoSQL DB — это именно операции чтения.

Однако если посмотреть в сторону KeyDB, то можно увидеть, что там есть киллер-фича — и даже две: я говорю о режимах Active Replica и Multi-Master. Использование этих режимов позволяет получить распределенный отказоустойчивый KeyDB, совместимый с Redis, писать в любую ноду, читать из любой ноды. И все это с точки зрения приложения выглядит как один экземпляр Redis без всяких Sentinel — то есть в коде приложения ничего менять не придется. 

Звучит как фантастика?

Читать далее
Total votes 40: ↑40 and ↓0+40
Comments21

Учимся разрабатывать REST API на Go на примере сокращателя ссылок

Level of difficultyMedium
Reading time30 min
Views43K

В этой статье мы напишем полноценный REST API сервис — URL Shortener — и задеплоим его на виртуальный сервер с помощью GitHub Actions.

Говоря «полноценный», я имею в виду, что это будет не игрушечный проект, а готовый к использованию:

  • мы выберем для него актуальный http-роутер,
  • позаботимся о логах,
  • напишем тесты: unit-тесты, тесты хэндлеров и функциональные,
  • настроим автоматический деплой через GitHub Actions и др.

Но важно понимать, что «готовый к продакшену» != «энтерпрайз».

Кратко обо мне: меня зовут Николай Тузов, я много лет занимаюсь разработкой на Go, очень люблю этот язык. Также веду свой YouTube-канал, на котором есть видеоверсия текущего гайда, с более подробными объяснениями.
Читать дальше →
Total votes 48: ↑47 and ↓1+55
Comments40

Подойдет ли PostgreSQL вообще всем проектам или нужны альтернативы

Reading time15 min
Views16K

В интернете только и разговоров, что про PostgreSQL и MySQL, но выбор СУБД много шире. В этом материале мы рассмотрим несколько популярных баз данных, разберемся с их спецификацией и сценариями использования, чтобы выйти за рамки привычных решений.
Читать дальше →
Total votes 38: ↑33 and ↓5+36
Comments54

Разработка REST-серверов на Go. Часть 1: стандартная библиотека

Reading time9 min
Views77K
Это — первый материал из серии статей, посвящённой разработке REST-серверов на Go. В этих статьях я планирую описать реализацию простого REST-сервера с использованием нескольких различных подходов. В результате эти подходы можно будет сравнить друг с другом, можно будет понять их относительные преимущества друг перед другом.

Первый вопрос разработчиков, которые только начинают применять Go, часто выглядит так: «Какой фреймворк стоит использовать для решения задачи X». И хотя это — совершенно нормальный вопрос, если задавать его, имея в виду веб-приложения и серверы, написанные на многих других языках, в случае с Go при ответе на этот вопрос нужно принять во внимание множество тонкостей. Существуют серьёзные аргументы как «за», так и «против» использования фреймворков в Go-проектах. Я, работая над статьями из этой серии, вижу своей целью объективное разностороннее исследование этого вопроса.


Читать дальше →
Total votes 35: ↑32 and ↓3+41
Comments8

Хождение по граблям PDO: что скрывают за собой современные PHP ORM

Level of difficultyEasy
Reading time21 min
Views9.9K

Привет, Хабр! В статье расскажу о том, с какими трудностями можно столкнуться при разработке ORM на PHP и поделюсь опытом по их преодолению.

Рассказывать буду только о том, о чём знаю сам. У вас может быть абсолютно другое мнение. Поэтому если вы нашли ошибку или хотите обсудить — свяжитесь со мной.

Читать далее
Total votes 41: ↑41 and ↓0+41
Comments24

Полезные материалы по Data Science и машинному обучению, которые помогут пройти сквозь джунгли из терминов

Level of difficultyEasy
Reading time8 min
Views24K

Привет, Хабр! Меня зовут Ефим, я MLOps-инженер в Selectel. В прошлом был автоматизатором, ML-инженером, дата-аналитиком и дата-инженером — и уже несколько лет падаю в пропасть машинного обучения и Data Science. Это буквально необъятная сфера, в которой почти нет ориентиров. Основная проблема в том, что разделов математики довольно много и все они, на первый взгляд, нужны в том же машинном обучении.

В этой статье делюсь полезными материалами, которые помогут найти и заполнить теоретические и практические проблемы и основательно подойти к своему профессиональному развитию. Добро пожаловать под кат!
Читать дальше →
Total votes 59: ↑59 and ↓0+59
Comments15

Понимаем JIT в PHP 8

Reading time7 min
Views35K
Перевод статьи подготовлен в преддверии старта курса «Backend-разработчик на PHP»




TL;DR


Компилятор Just In Time в PHP 8 реализован как часть расширения Opcache и призван компилировать операционный код в инструкции процессора в рантайме.

Это означает, что с JIT некоторые операционные коды не должны интерпретироваться Zend VM, такие инструкции будут выполняться непосредственно как инструкции уровня процессора.
Читать дальше →
Total votes 19: ↑17 and ↓2+21
Comments12

ETL-пайплайны на Airflow: Хороший, Плохой, Злой

Reading time8 min
Views14K

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

В этой статье мы рассмотрим как с помощью Airflow ETL операторов выгрузить данные из Postgres в BigQuery в парадигмах ETL и ELT. Далее разберем сложности, с которыми вы можете столкнуться при реализации инкрементальной загрузки данных в DAG (DAG - directed acyclic graph, ориентированный ацикличный граф - цепочка связанных задач). Наконец, мы обсудим почему Airflow ETL операторы не смогут покрыть все ваши потребности в интеграциях в дальней перспективе.

Читать далее
Total votes 4: ↑4 and ↓0+4
Comments3

ETL и ELT: ключевые различия, о которых должен знать каждый

Reading time10 min
Views34K
image

ETL и ELT — самые широко используемые способы доставки данных из одного или нескольких источников в централизованную систему для удобства доступа и анализа. Обе этих методики состоят из этапов extract (извлечения), transform (преобразования) и load (загрузки). Разница заключается в последовательности действий. Хотя можно подумать, что небольшое изменение в порядке этапов никак не влияет, на самом деле для потока интеграции это меняет всё.

В этом посте мы подробно рассмотрим процессы ETL и ELT, а также сравним их по важным критериям, чтобы вы могли понять, какой лучше подходит для вашего конвейера данных.
Читать дальше →
Total votes 8: ↑5 and ↓3+3
Comments9

Как всё успевать: 10 проверенных принципов борьбы с хаосом задач

Reading time9 min
Views33K

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

За долгие годы работы в IT такие методики и принципы выработались и у меня. Например, «Принцип пустого почтового ящика». Или «Принцип постепенного проявления». Они проверены временем и помогают мне успешно ориентироваться в окружающем потоке задач. В этой статье я хочу поделиться с вами этими принципами. Возможно, какие-то из них покажутся вам полезными и пригодятся.

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

Самое подробное руководство по установке высокодоступного (почти ಠ ͜ʖ ಠ ) Kubernetes-кластера

Reading time22 min
Views27K

В предыдущей статье я рассказывал, как построить простой кластер Kubernetes с одним мастер-узлом. Прошло время, опали листья... и мне захотелось большего, поэтому решил позариться на высокодоступные кластеры. В интернете много статей о том, как построить подобное решение, и давайте даже опустим тот факт, что многие из них уже устарели. Одно дело — установить кластер, а как же обслуживание: удаление, добавление, замена узлов? Про это и не вспоминают! В итоге оказалось, что не всё так просто, и вот, спустя больше ста установок, удалений и замен, у меня получилось собрать подробнейшее руководство по установке и, главное, обслуживанию highly available кластера с помощью Kubespray.

Читать далее
Total votes 22: ↑22 and ↓0+22
Comments19

Когнитивные искажения или мои мысли о том, как мы мыслим

Reading time13 min
Views32K

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

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

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

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

Читать далее
Total votes 71: ↑70 and ↓1+82
Comments161

Распределенные Workflow на PHP. Часть 1

Reading time8 min
Views11K

Мы занимаемся разработкой огромного количества сложного ПО для автоматизации и энтерпрайза и Workflow для нас — это большая и больная проблема. Если для вас тоже — я расскажу, как писать и оркестрировать очень сложные процессы на масштабах, и как убедиться, что они не падают. А также как делать таймеры на 30 дней внутри процессов. И самое главное, как всё это пилить на PHP.

Меня зовут Антон Титов. Я более 17 лет занимаюсь коммерческой разработкой. Являюсь соавтором Spiral Framework, RoadRunner и Cycle ORM. Основной стек: PHP и Golang. Разговор пойдет про нашу разработку Temporal PHP SDK, которая и помогает решать все вышеперечисленные сложные задачи.

Читать далее
Total votes 20: ↑18 and ↓2+24
Comments5

Blue-green deployment, canary release: рецепт приготовления безрисковых релизов

Reading time15 min
Views28K

Банковские сервисы по умолчанию не должны падать, и даже прилечь на секундочку, и даже когда мы обновляемся. Ведь даже секунды могут привести к потерям с множеством нулей. Чтобы этого не произошло мы используем blue-green deployment.

Простым языком blue-green deployment - способ развертывания, который позволяет обновлять приложения не отклоняя ни одного запроса, без остановок. Как это сделать, расскажу и покажу на примере. Статья подойдет DevOps-инженерам и бэкенд-разработчикам, особенно на HighLoad-проектах, а также моим будущим коллегам, как методичка по безрисковым релизам, чтобы прод не падал каждые 2 недели по графику релизов (а такое тоже бывало).

Читать далее
Total votes 29: ↑27 and ↓2+27
Comments14

Как я писал асинхронные веб-запросы на Python, или почему провайдер считает, что я бандит

Reading time7 min
Views54K

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

Подробности что и зачем - вне этого рассказа. Принципиальный вопрос здесь другой - скорость. Скорость реально важна (порядок количества запросов - десятки и сотни). Потому что ждать - не кайф.

Здесь я хочу поделиться своим ресёрчем на тему запросов, как делать круто, а как нет. С примерами кода конечно. А так же рассказать, как я тупил.

Читать далее
Total votes 38: ↑19 and ↓19+5
Comments26
1
23 ...

Information

Rating
Does not participate
Registered
Activity