Как стать автором
Обновить
0
0
Eugene Vdovenko @Misanthropist

IT-шник

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

Выпускайте Кракена: опыт использования KrakenD

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

Привет, Хабр! Меня зовут Владимир Калугин, я руковожу бэкенд-разработкой в МТС Travel. Сегодня расскажу про KrakenD, готовое решение, которое мы используем для реализации API-шлюза, важной штуки для продуктов с микросервисной архитектурой. Уверен, наш опыт может пригодиться разработчикам из других сервисов.

Читать далее
Всего голосов 19: ↑18 и ↓1+19
Комментарии10

Как написать удобный API — 15 рекомендаций

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

Разработка хорошего API требует особого внимания к деталям и соблюдения ключевых принципов программирования прикладных интерфейсов. Поэтому важно, чтобы у разработчиков были необходимые знания. Меня зовут Анастасия Иванова, я работаю в МТТ (входит в экосистему МТС) техническим писателем МТС Exolve. В этой статье я дам рекомендации по созданию API, которые помогут вам сделать его надёжным, масштабируемым и удобным в использовании. Самое интересное — под катом.

Читать далее
Всего голосов 14: ↑9 и ↓5+10
Комментарии6

Трассировка сервисов, OpenTracing и Jaeger

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

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

Для минимизации ручного труда мы решили воспользоваться одним из инструментов трассировки. О том, как и для чего можно использовать трассировку и как это делали мы, и пойдет речь в этой статье.
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии7

Что такое транзакция

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

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

Транзакционные базы данных (базы, работающие через транзакции) выполняют требования ACID, которые обеспечивают безопасность данных. В том числе финансовых данных ? Поэтому разработчики их и выбирают.

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

 

Читать далее
Всего голосов 27: ↑17 и ↓10+12
Комментарии30

PEP 257 на русском. (Соглашение о Docstrings)

Время на прочтение8 мин
Количество просмотров40K
Привет, Хабр. Бывают моменты, когда тебе хочется максимально погрузиться в язык и понять все его тонкости. В случае Python один из лучших способов это сделать — читать на официальном сайте документацию и PEP-ы. В своё время я этого не делал, поскольку не мог понять многих «технических» моментов, а вариантов русского перевода не было. Сейчас же я решил сам перевести PEP-257, где рассказывается о правильном документировании кода, ведь наверняка это поможет новичкам лучше понять истинный «пайтоновский» подход к написанию кода. Я переводил примеры кода на русский язык, но только для того, чтобы лучше донести смысл. В реальном программировании старайтесь писать документационные строки на английском. Также говорю сразу, что как синоним термина «docstring» я использовал слова: «документация» и «документационные строки». Что же, перейдём к самому переводу.
Читать дальше →
Всего голосов 22: ↑20 и ↓2+25
Комментарии7

Продвинутое конфигурирование Docker Compose (перевод)

Время на прочтение5 мин
Количество просмотров153K
Docker Compose обладает целым рядом нетривиальных способов применения, которые мы рассмотрим в этой заметке. Это очередной перевод статьи, которую мы разбирали при подготовке материалов нашего курса Python для Web-разработки.



Контроль порядка запуска


Docker Compose запускает контейнеры в порядке зависимостей, используя опцию depends_on, чтобы указывать, когда запускается сервис. Для определения порядка запуска Compose применяет depends_on, links, volumes_from и network_mode: «service: ...».

Если контейнер должен дождаться состояния “ready” другого контейнера, можно использовать инструменты wait-for-it или dockerize. Они будут проверять хосты и порты до тех пор, пока TCP соединение не будет подтверждено. Для включения принудительного ожидания в композицию необходимо добавить entrypoint:

version: '2'

services:
    web:
        build: .
        ports:
            - "80:8000"
        depends_on:
            - db
        entrypoint: "./wait-for-it.sh db:5432"
    db:
        image: postgres

Вы всегда можете самостоятельно написать скрипт-обёртку, если возникнет необходимость в усилении контроля.
Читать дальше →
Всего голосов 21: ↑19 и ↓2+17
Комментарии8

Если бы я учил Frontend сегодня. Советы начинающим

Время на прочтение4 мин
Количество просмотров71K
Мой путь в веб-разработке начался 5 лет назад. За это время я успел испробовать множество технологий, а в последние 3 года развиваюсь в направлении frontend.

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

Итак, ты хочешь стать Frontend разработчиком. Что для этого нужно?

Изучение HTML, CSS, Javascript
Всего голосов 19: ↑8 и ↓11+6
Комментарии28

Angular для Vue разработчиков

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

Сейчас во фронтенде среди фреймворков есть три явных лидера: Angular, React и Vue. Думаю, мы можем судить о любви разработчиков к проекту по количеству звезд на GitHub. На момент написания данной статьи у Vue уже 161 тысяча звезд, на втором месте находится React с 146 тысячами, а на третьем месте — Angular со своими скромными 59.6 тысячами.


С первого взгляда может показаться, что Angular не настолько популярный, как другие фреймворки, но если обратиться к результатам исследования статистики с портала Tecla, то мы увидим, что Angular занимает довольно большую долю рынка. Например, по данным исследования Angular работает на более чем 400 тысячах сайтов, в то время как Vue — на 100 тысячах. Предлагаю в этом разобраться. Рассмотрим, за что разработчики любят Vue, почему много приложений написаны на Angular и какие выгоды может получить разработчик при использовании фреймворка от Google конкретно для себя.


Читать дальше →
Всего голосов 29: ↑28 и ↓1+33
Комментарии32

PHP-Дайджест № 177 (23 марта – 6 апреля 2020)

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

Свежая подборка со ссылками на новости и материалы. В выпуске: расписание релиза PHP 8, анализ эргономики объектов в PHP и 5 свежих RFC из PHP Internals, немного полезных инструментов, видео, подкасты и многое другое.

Приятного чтения!


Читать дальше →
Всего голосов 34: ↑33 и ↓1+46
Комментарии14

Вы правда знаете о том, что такое массивы?

Время на прочтение6 мин
Количество просмотров26K
Там, где я тружусь, от веб-разработчиков ожидают знания PHP и JavaScript. Я, проводя собеседования, обнаружил, что достаточно задать всего один простой вопрос для того чтобы узнать о том, насколько глубоко разработчик понимает инструменты, которыми пользуется каждый день. Вот этот вопрос:

Каковы сходства и различия массивов в JavaScript и в PHP?

Одно дело — умение писать код. И совершенно другое — понимание внутренних механизмов используемых языков.



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

Это — некорректное предположение, ведущее к множеству мелких ошибок, к написанию нерационально устроенного кода, к невозможности эффективно пользоваться сильными сторонами языка.
Читать дальше →
Всего голосов 50: ↑23 и ↓27+15
Комментарии76

Doctrine ResultSetMapping на примерах

Время на прочтение8 мин
Количество просмотров21K
Doctrine ORM предоставляет разработчику удобные средства выборки данных. Это и мощный DQL для работы в объектно-ориентированном ключе, и удобный Query Builder, простой и понятный в использовании. Они покрывают большую часть потребностей, но иногда возникает необходимость использовать SQL запросы, оптимизированные или специфичные для конкретной СУБД. Для работы с результатами запросов в коде важно понимание того, как работает маппинг в Doctrine.


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

Онлайн митапы на всю неделю c 10 апреля по DevOps, бэку, фронту, QA, управлению командой и аналитике

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

Привет! Меня зовут Алиса и мы вместе с командой meetups-online.ru подготовили список интересных митапов в сети на ближайшую неделю.


Пока встречаться с друзьями получается только в online-барах, можно развлечь себя прогулкой на митап, например, не по своей теме. Или можно ввязаться в холивар (хоть и обещали себе никогда так не делать) на дебатах про TDD или дискуссии про необходимость аналитиков.


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


image

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

Указатели в Python: в чём суть?

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

Если вы когда-нибудь работали с такими низкоуровневыми языками, как С или С++, то наверняка слышали про указатели. Они позволяют сильно повышать эффективность разных кусков кода. Но также они могут запутывать новичков — и даже опытных разработчиков — и приводить к багам управления памятью. А есть ли указатели в Python, можно их как-то эмулировать?

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

Благодаря этой статье вы лучше поймёте модель объектов в Python и узнаете, почему в этом языке на самом деле не существуют указатели. На случай, если вам понадобится сымитировать поведение указателей, вы научитесь эмулировать их без сопутствующего кошмара управления памятью.
Читать дальше →
Всего голосов 75: ↑70 и ↓5+65
Комментарии28

SQL: пара приемов в SELECT-запросах

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

Автор: Юрий Цыганенко, Senior QA

Тестирование новых функций часто проводят на данных, взятых с уже функционирующей системы. В этом случае тестировщикам порою приходится строить запросы для хитрых случаев. Например, нужно протестировать новую функциональность интернет-магазина, причём играют роль интервалы между покупками. Нам доступны данные с работающей версии — можно загрузить их на тестовый стенд и проверить работу новой версии продукта. (NB!: конечно, имея дело с «живыми» данными, нужно исключить из них приватную информацию и обеспечить возможность логина интересующим нас пользователям).

Для выбора интересных нам пользовательских аккаунтов нужно сопоставить максимальные интервалы между покупками у разных пользователей.

От тестировщика требуется построить SQL-запрос, выдающий N пользователей, у которых интервалы между датами заказов будут наибольшими.

Аналогичные задачи и их разбор — под катом.
Читать дальше →
Всего голосов 16: ↑11 и ↓5+6
Комментарии7

Аутентификация и авторизация в микросервисных приложениях

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

Автор: Вячеслав Михайлов, Solutions Architect

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

Мы разберемся с процессом аутентификации пользователя, работой технологии единого входа (Single sign-on/SSO), дадим общее представлении о технологии OAuth2 и принципах ее работы, не углубляясь в особенности конкретной технической реализации. В следующей статье в качестве примера удачной реализации мы рассмотрим библиотеку Thinktecture Identity Server v3, подробнее остановимся на ее функциональных возможностях, поговорим, как собрать минимальный набор компонент, необходимый для работы в микросервисной архитектуре и достойный использования в боевой системе. В третьей части мы покажем, как расширять эту библиотеку, подстраиваясь под нужды вашей системы, а завершит цикл статей разбор различных сценариев, встречавшихся в жизни многих разработчиков с рекомендациями для каждого случая.
Читать дальше →
Всего голосов 41: ↑40 и ↓1+39
Комментарии15

Зачем нужен Refresh Token, если есть Access Token?

Время на прочтение4 мин
Количество просмотров247K
Недавно мы в Voximplant улучшали авторизацию в SDK. Посмотрев на результаты, я несколько опечалился, что вместо простого и понятного токена их стало две штуки: access token и refresh token. Которые мало того что надо регулярно обновлять, так еще документировать и объяснять в обучающих материалах. Помня, что в OAuth два токена нужны в основном из-за разных сервисов, на которых они используются (даже вопрос на stackoverflow есть), а у нас такой сервис один, я несколько офигел и пошел на второй этаж вытрясать души из разработчиков. Ответ получился неожиданным. Его нет на stackoverflow. Зато он есть под катом.
Читать дальше →
Всего голосов 74: ↑70 и ↓4+66
Комментарии296

Кот под колпаком. Часть 1

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

В своей работе мы активно используем hashcat, но нам стало не хватать в этом продукте некоторых функций. Например: возможность отправки уведомлений, наличие единого интерфейса к управлению взломом хешей, удобного хранения "взломанных" хешей (через некоторое время смотреть в hashcat.potfile становится больно глазам). В некоторых ситуациях необходимо выполнять параллельный взлом хешей, то есть распределить задачи взлома между несколькими хостами.


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


В общем если тема вам близка — просим "под кат" и в комментарии.

Поехали!
Всего голосов 4: ↑2 и ↓20
Комментарии1

Еще раз о passport.js

Время на прочтение6 мин
Количество просмотров49K
Недавно мне передали на поддержку проект на express.js. При изучении кода проекта я обнаружил немного запутанную работу с аутентификацией/авторизацией которая базировалась, как и 99,999% случаев, на библиотеке passport.js. Этот код работал, и следуя принципу «работает — не трогай», я оставил его как есть. Когда через пару дней мне дали задание добавить еще две стратегии авторизации. И тогда я начал вспоминать, что уже делал аналогичную работу, и это занимало несколько строк кода. Полистав документацию на сайте passport.js, я почти не сдвинулся с места в понимании того, что и как нужно делать, т.к. там рассматривались случаи, когда используется ровно одна стратегия, для которой, для каждой в отдельности, и даются примеры. Но как соединить несколько стратегий, зачем нужно использовать метод logIn() (что то же самое, что login()) — по-прежнему не прояснялось. Поэтому, чтобы разобраться сейчас, и не повторять тот же поиск еще и еще раз, — я составил для себя эти заметки.
Читать дальше →
Всего голосов 16: ↑12 и ↓4+8
Комментарии20

Топ-5 инструментов управления Agile-проектами

Время на прочтение11 мин
Количество просмотров50K
Постоянное внимание к техническому совершенству и качеству проектирования повышает гибкость проекта.
Agile-манифест


Испытывают ли разработчики ПО необходимость в инструментах для управления проектом? Могут ли такие инструменты помочь в написании качественного продукта?

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


Идеальный рабочий процесс.

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

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

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


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

Использование хороших инструментов управления позволяет клиенту получить ясную картину, как команда справляется с поставленным задачами, оценить степень готовности продукта к концу очередного спринта/итерации.
Читать дальше →
Всего голосов 9: ↑8 и ↓1+7
Комментарии5

Подходы к проектированию RESTful API

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

Автор: Вячеслав Михайлов, Solutions Architect.

В этой статье я поделюсь опытом проектирования RESTful API — на конкретных примерах покажу, как делать хотя бы простые сервисы красиво. Также мы поговорим, что такое API и зачем он нужен, поговорим об основах REST — обсудим, на чем его можно реализовывать; коснемся основных веб-практик, которые зависят и не зависят от этой технологии. Также узнаем, как составлять хорошую документацию, затрачивая на это минимум усилий, и посмотрим, какие существуют способы нумерации версий для RESTful API.

Часть 1. Теория


Итак, как мы все знаем, API — application programming interface (интерфейс программирования приложений), набор правил и механизмов, с помощью которых одно приложение или компонент взаимодействует с другими

Почему хороший API — это важно?

  • Простота использования и поддержки. Хороший API просто использовать и поддерживать.
  • Хорошая конверсия в среде разработчиков. Если всем нравится ваш API, к вам приходят новые клиенты и пользователи.
  • Выше популярность вашего сервиса. Чем больше пользователей API, тем выше популярность вашего сервиса.
  • Лучше изоляция компонентов. Чем лучше структура API, тем лучше изоляция компонентов.
  • Хорошее впечатление о продукте. API — это как бы UI разработчиков; это то, на что разработчики обращают внимание в первую очередь при встрече с продуктом. Если API кривой, вы как технический эксперт не будете рекомендовать компаниям использовать такой продукт, приобретая что-то стороннее.


Теперь посмотрим, какие бывают виды API.

Виды API по способу реализации:
  • Web service APIs
    • XML-RPC and JSON-RPC
    • SOAP
    • REST

  • WebSockets APIs
  • Library-based APIs
    • Java Script

  • Class-based APIs
    • C# API
    • Java



Виды API по категориям применения:

  • OS function and routines
    • Access to file system
    • Access to user interface

  • Object remoting APIs
    • CORBA
    • .Net remoting

  • Hardware APIs
    • Video acceleration (OpenCL…)
    • Hard disk drives
    • PCI bus



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

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность