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

Компания QIWI временно не ведёт блог на Хабре

Сначала показывать

Техдолга не существует

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

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

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

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

QIWI Server Party 9.0 — 14 декабря, офлайн и онлайн

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

Привет! Совсем скоро мы проведём наш очередной QIWI Server Party, уже 9-й по счёту. Это митап для backend-разработчиков и тех, кому в целом интересна подобная тематика.

Как обычно, расскажем об опыте больших компаний из первых рук — будут не только спикеры из нашей компании, но и коллеги из Альфа-Банка и Яндекса. На митап можно будет прийти как офлайн, если вы в Москве, так и посмотреть трансляцию. Главное — заранее зарегистрироваться.

Итак, вот программа:

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

Яндекс Браузер для организаций. Опыт QIWI

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

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

Например, есть люди, которые в своей работе часто взаимодействуют с бухгалтерией, финансами, единой биометрической системой, Госуслугами, Контуром и прочим добром. Причём от того, насколько комфортно им это делать, на самом деле зависит выполнение их рабочих обязанностей. А вы знаете, что сейчас для многих (если не для большинства) окологосударственных сайтов нужны сертификаты. И чтобы сделать из дефолтного Chrome или Firefox подходящий инструмент для такого сотрудника, приходилось немного костылить — обвешиваться плагинами, настраивать их, потом по отдельности помогать каждому человеку, если что-то вдруг тупило. В общем, так себе история.

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

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

Читать далее
Всего голосов 21: ↑18 и ↓3+21
Комментарии26

Реализация случайности в CSS при помощи тригонометрии

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров5.3K

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

Несмотря на надёжность этого решения, оно имеет и недостатки:

  • Функция деления с остатком не непрерывна
  • Способ слишком сложен: он требует трёх переменных и определения @property для каждого случайного значения, которое мы хотим сгенерировать
  • Требует применения @property, которое пока поддерживается не очень широко

К счастью, можно сделать лучше! В этой статье я предложу более оптимальное решение на основе тригонометрии.
Читать дальше →
Всего голосов 13: ↑12 и ↓1+15
Комментарии4

Переезжаем с DUO Mobile на Мультифактор. Опыт (и грабли) QIWI

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

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

А если мы говорим о работе в больших компаниях, где есть множество разных систем с разным уровнем доступа, то без одного или нескольких дополнительных факторов не обойтись. Мы в QIWI давно используем второй фактор для доступа к большинству систем.

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

Читать далее
Всего голосов 15: ↑14 и ↓1+17
Комментарии1

Jailbreak checker — как обезопасить свое iOS-приложение

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4.8K

Привет! Меня зовут Тоня, я продуктовый разработчик в продукте QIWI Кошелек. Недавно мы делали задачу по предотвращению рисков в связи с использованием приложения с Jailbreak. Хочу рассказать о трудностях, с которыми столкнулись на пути, и о том, как мы их разрешили.

Кто такой этот ваш Jailbreak?

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

Дословно jailbreak переводится как «побег из тюрьмы» или «взлом». Данный термин, как правило, используется в отношении iOS. Простыми словами — это использование уязвимостей устройства для получения полного доступа к операционной системе. Из-за такого полного доступа к системе появляется и доступ до keychain, который становится уже не таким защищенным. После взлома у пользователя появляется доступ к альтернативным сторам, из которых можно скачать приложения, не проходившие ревью в App Store. Одним из самых популярных таких альтернативных сторов является Cydia, который чаще всего сразу же устанавливается в момент взлома устройства. 

Зачем его отслеживать?

Читать далее
Всего голосов 25: ↑21 и ↓4+20
Комментарии35

Сага распределенных транзакций

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

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

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

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

У некоторых в команде уже был опыт работы с xa-транзакциями.
Довольно удобный способ, когда у вас есть несколько ACID СУБД. Процесс состоит из двух фаз.

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

Хакатоны в QIWI — история и проекты

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

Привет! Мы в QIWI любим проводить хакатоны. Во-первых, это просто интересно и помогает разгрузить голову. Во-вторых, зачастую помогает решить какие-то внутренние проблемы компании, от организации тех или иных процессов, которые давно хотелось починить.

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

Хакатонам в QIWI более 10 лет. Самый первый хакатон помнят только олды, которые давно в компании. Конечно, времена были разные, когда-то хакатонов проводили больше, а когда-то — меньше, но если говорить о каких-то усредненных числах, то в год мы делаем примерно два хакатона.

На каждый заявляется примерно 10-15 команд. Иногда доходило и до 20. Но одно дело — заявиться, другое — пройти отборочный этап и дойти до непосредственного участия.

Сами хакатоны у нас бывают двух видов:

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

Расширение возможностей веб-приложений с помощью WebAssembly и Python

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров2.8K

В этой статье мы расскажем, как запустить программу на Python внутри другого приложения, использующего среду исполнения Wasm (хост), и заставить программу на Python общаться с хостом, и наоборот.

Пару месяцев назад мы добавили Python в Wasm Language Runtimes. Мы опубликовали собранный двоичный файл python.wasm, который можно использовать для выполнения скриптов на Python при помощи WebAssembly, чтобы обеспечить повышенную защиту и портируемость.

После этого релиза мы получили много отзывов о том, как сделать его ещё более полезным для разработчиков. Одной из часто упоминаемых тем стала необходимость двунаправленной связи между хостом на Wasm и кодом на Python, выполняемым в python.wasm.

Мы поработали над этом вместе с командой Suborbital и реализовали приложение, демонстрирующее двунаправленную связь благодаря реализации SE2 Plugin ABI. Эту работу позже внедрили в Suborbital SE2.

Пример приложения можно найти в WLR/python/examples/bindings/se2-bindings. Его легко запустить и оно позволит вам разобраться, как встраивать Python в приложение на Wasm и реализовывать привязки для двунаправленной связи.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии2

Как тестировать не-REST-бэкенд. Часть третья, gRPC

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров10K

Итак, мы с вами добрались до третьей, самой «хардовой» части цикла. Сегодня поговорим про gRPC.

Что такое gRPC? 

Сам RPC — удалённый вызов процедур (иногда вызов удалённых процедур; RPC от англ. remote procedure call) — класс технологий, позволяющих программам вызывать функции или процедуры других программ, делая это так, как если бы они находились в одном адресном пространстве. Буква g в названии — это гугловая реализация этих технологий.

Разберем это все на примере.

Допустим, что вы — программист и сидите в монолитной репе. У вас одно приложение. Сам проект открыт в IDE и вы в нем работаете. В репе реализован определенный класс (например, на Kotlin), у которого есть метод, возвращающий вам данные по пользователю.

Читать далее
Всего голосов 22: ↑21 и ↓1+25
Комментарии6

Сравниваем модели машинного обучения с применением статистических тестов

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров4.1K

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

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

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

Как тестировать не-REST-бэкенд. Часть вторая, WebSocket

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров11K

Привет! Продолжаем цикл статей про тестирование не-REST-бэкенда, в прошлый раз мы говорили о GraphQL, теперь пришло время WebSocket.

Итак, что такое WebSocket?

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

Что тут важно — что это протокол (со всеми вытекающими последствиями для протокола), который использует постоянное соединение.

Работу по WebSocket в обычной жизни можно представить примерно так.

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

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

ОК, что вам делать в такой ситуации?

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

QIWI Грейдер — как оценивать сотрудников быстро, удобно, прозрачно

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.7K

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

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

Читать далее
Всего голосов 15: ↑13 и ↓2+14
Комментарии8

Как тестировать не-REST-бекэнд. Часть первая, GraphQL

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров10K

Привет! Меня зовут Сергей, я более 11 лет в тестировании, и успел за это время перепробовать множество разных подходов в QA — начинал простым тестировщиком, затем строил и развивал всевозможные отделы тестирования и автоматизации, а сейчас работаю в QIWI.

В этой серии постов я хочу поговорить с вами про тестирование трех популярных так называемых не-REST-бэкендов. Самое главное для начала — определиться с терминами, договоримся, что везде в тексте, где я упоминаю REST — речь идет именно о REST HTTP-бэкенде. Наверняка многие из вас с ним работали и вообще неплохо знакомы.

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

Под катом — разбор тестирования первого из этой тройки, GraphQL. Все примеры в посте я делал с помощью Postman, он достаточно популярен и доступен, чтобы вы при желании могли всё быстро в нём повторить.

Читать далее
Всего голосов 17: ↑16 и ↓1+20
Комментарии6

OKR как бесконечное топливо для развития инженерных практик

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

Привет! Меня зовут Женя, я IT-менеджер в продукте QIWI Кошелек, над которым работают 5 фиче-команд (на начало написания статьи). В этом посте расскажу вам про наш опыт внедрения OKR («Цели и ключевые результаты», Objectives and Key Result») для непрерывного улучшения процессов разработки и развития инженерных практик. Как мы всё это делали, как теперь выглядят наши процесс и что нам дал OKR — под катом.

Читать далее
Всего голосов 14: ↑12 и ↓2+16
Комментарии7

Мониторинг черных ящиков и котов в мешке через eBPF

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров3.9K

Привет! Меня зовут Петр Бобров, в QIWI я отвечаю за отказоустойчивость, расскажу немного историй про сторонних вендоров, у всех они разные. У нас есть карточный процессинг, потому что мы банк, у нас банковская лицензия, проводим много платежей. Еще можно черными ящиками считать и базы данных: кто знает, как там работает Oracle, кто знает, как работает Linux внутри? Думаю, очень немного людей разбирается в этом, как оно работает на низком уровне. 

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

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

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

Хотите практиковать навыки руководителя? Попробуйте роль Dungeon Master

Время на прочтение5 мин
Количество просмотров3.5K
Вы никогда не узнаете всего о руководстве, и это нормально!


Этой зимой мы с группой друзей болтали о Dungeons & Dragons (пятой редакции). Некоторые из них раньше играли, другие были абсолютными новичками, и все хотели попробовать провести совместную кампанию.

Чтобы прощупать почву, мы начали с ваншота (one-shot) — законченного приключения, прохождение которого занимает 3-4 часа. Я играл роль владыки подземелья (Dungeon Master), задача которого заключается в организации приключения (скорее всего, теперь я навечно останусь DM).

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

В конце концов, я управлял целым игровым миром, находящимся в нём NPC (персонажами), позволив трём непредсказуемым приключенцам отрываться по-полной, ограничивая их правилами и развивая некое подобие истории. Всё это позволяло практиковать навыки менеджера и директора, что в мире бизнеса даётся потом и кровью.
Читать дальше →
Всего голосов 19: ↑18 и ↓1+21
Комментарии7

Микрофронтенды на Module Federation — наш опыт. Часть 2

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров4.3K

Всем привет! Меня зовут Женя, я разработчик из QIWI, занимаюсь созданием внутренних сервисов. Совсем недавно мы провели эксперимент по использованию микрофронтендов, и я хочу поделиться с вами опытом использования. Это вторая часть серии статей про наш опыт микрофронтов.

Читать далее
Всего голосов 20: ↑20 и ↓0+20
Комментарии6

Микрофронтенды на Module Federation — наш опыт. Часть 1

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров5.3K

Всем привет! Меня зовут Женя, я разработчик из QIWI, занимаюсь созданием внутренних сервисов. Совсем недавно мы провели эксперимент по использованию микрофронтендов, и я хочу поделиться с вами опытом использования. В качестве основы для построения системы мы выбрали фичу Webpack - Module Federation.

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

Чистый код. Часть 3

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

Привет! Этим постом я завершаю цикл из конспектов видеолекция Дяди Боба про чистый код.

Сегодня обсудим обработку исключений, комментарии к коду, форматирование, размеры файлов и дата-классы.

Обработка исключений

Не раскрывайте реализацию

Майкл Физерс (Working effectively with legacy code) сказал: «Если обработка ошибок раскрывает реализацию — то это неправильная обработка ошибок». Не раскрывать реализацию можно, если написать исключения перед тем, как написать реализацию функции (привет TDD — по-другому и не получится).

Рассмотрим классCommissionCalculator , который обменивает сумму в разных валютах.

Читать далее
Всего голосов 23: ↑20 и ↓3+20
Комментарии52
1
23 ...