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

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

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

Единый формат тестовых данных. Или как ускорить разработку интеграционных тестов

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

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

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

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

Как мы сломали стену между разработкой и дизайном

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

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

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

Представьте ситуацию.

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

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

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

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

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

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

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

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

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

Опасный гибрид: разгон Super Game Boy

Время на прочтение6 мин
Количество просмотров3.1K
Super Game Boy позволяет играть в игры Game Boy на Super Nintendo. Это впечатляет, учитывая, что эти две консоли не имеют практически ничего общего. Сегодня мы рассмотрим гибридное устройство, создающее многопроцессорную машину, в которой два CPU совершенно непохожи друг на друга. А возможно, мы заставим Super Game Boy работать действительно быстро.

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

Как понять, что клиента пора реактивировать?

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

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

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

Меня зовут Артём, я антифрод-аналитик в Каруне, и в данной статье мы рассмотрим достаточно простой подход, с помощью которого можно решить обозначенную проблему. Если вы скажете, что антифрод решает абсолютно другой спектр задач, то будете абсолютно правы. Однако во время работы с одним из проектов при переосмыслении использованного алгоритмического стека в нём, мы пришли к выводу, что отдельные небольшие кусочки этого стека вполне могут подходить и для решения других задач. На базе нашего опыта расскажу, как с помощью байесовского моделирования и библиотеки PyMC3 можно получить примерную картину о том, как долго ваш клиент должен быть неактивным, чтобы считать его отточником. Это может помочь ответить на базовые вопросы бизнеса и подготовиться к реализации более точных и качественных моделей (если это потребуется).

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

Новые возможности в скриптах Роутер Ос 7 Микротик

Время на прочтение10 мин
Количество просмотров14K
Появления Роутер ОС 7 давно ждали. Новая система создавалась разумеется для более производительных устройств, имеющих новые процессоры и больше оперативной памяти. Новое ядро Linux, поддержка WireGuard и ZieroTier, новые возможности маршрутизации и BGP, новый users manager, обновление MPLS, запуск приложений в контейнерах далеко не полный список новинок.

Но в этой статье мы будем обсуждать нововведения только в скриптовом языке системы вплоть до актуальной beta версии 7.12.
Читать дальше →
Всего голосов 13: ↑13 и ↓0+13
Комментарии28

Развлекательное чтиво на выходные

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

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

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

Расслабон
Всего голосов 34: ↑26 и ↓8+26
Комментарии50

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

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

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

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

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

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

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

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

Тестирование с использованием стабов, моков и прокси

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


Под тестированием с использованием моков понимается модульное тестирование с использованием моков в качестве заменителей реальных объектов. Под реальными объектами я подразумеваю объекты, которые тестируемый модуль (класс) будет использовать в реальном приложении. Если у вас есть класс Calculator, которому для загрузки данных из базы данных требуется объект dao (Data Access Object), то объект dao — это «реальный объект». Чтобы протестировать класс Calculator, необходимо предоставить ему объект dao, имеющий корректное соединение с базой данных. Кроме того, нужно добавить в базу данные, необходимые для тестирования.
Читать дальше →
Всего голосов 12: ↑10 и ↓2+11
Комментарии0

Ищем отмывочные сделки в Telegram Usernames в блокчейне TON

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

Отсутствие нормального регулирования крипто рынка, делает его полигоном для испытания всех возможных скам механик. Исследование 2022 года показало, что около 45% объема сделок EVM блокчейнов по NFT являются частью отмывочной торговли.

Учитывая такой большой процент мне стало интересно как с этим обстоят дела в блокчейне TON и я решил применить фильтры из исследования приведенного выше, чтобы найти отмывочные сделки в самой большой NFT коллекции TON - Telegram Usernames.

Рассмотрим:

• что такое отмывочная торговля NFT;

• зачем она нужна и что привело к таким большим процентам отмыва в EVM блокчейнах;

• методологию поиска отмывочных сделок;

• отмывочные сделки в Telegram Usernames.

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

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

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

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

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

Основы полнотекстового поиска в ElasticSearch. Часть вторая

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

Это вторая статья из цикла. В первой части я рассказывал про самые базовые понятия Elasticsearch. В этом же посте разберем устройство анализа текста и немного пощупаем полнотекстовый поиск.

Несколько слов про анализ текста

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

Мы уже познакомились с некоторыми типами Elasticsearch, но в этом разделе будем рассматривать только два — keyword и text. Тип text анализируется для полнотекстового поиска. Тип keyword преимущественно остается без изменений для точного поиска, сортировки и агрегации.

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

Основы полнотекстового поиска в ElasticSearch. Часть первая

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

Привет! Меня зовут Глеб, я разработчик команды продукта «Сервис персонализации» в SM Lab. В цикле из трех постов я расскажу про основы полнотекстового поиска в Elasticsearch.

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

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

Итак, начнём с самых базовых понятий.

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

Нейромузыка: может ли робот создавать треки?

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

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

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

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

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

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

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

В этой статье мы расскажем, как запустить программу на 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

Преимущества функционального программирования на примерах C#

Время на прочтение7 мин
Количество просмотров7.7K
Функциональное программирование (ФП) — это парадигма, в которой упор делается на использование функций для решения задач, а не на состояние и изменяемые данные. В последние годы ФП завоевало популярность среди разработчиков благодаря многочисленным преимуществам, которые позволяют использовать его для разработки сложных систем. В этой статье мы расскажем о преимуществах функционального программирования и о том, почему вам стоит рассмотреть возможность его использования в вашем следующем проекте.
Читать дальше →
Всего голосов 13: ↑6 и ↓7+2
Комментарии9

Как перестать строить умозрительные модели и посмотреть на свою реальную команду

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

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

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

Что такое CLTV и как мы в билайне с ним работаем

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

Немного душная, но важная вводная часть

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

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

• Какую сумму инвестировать в бизнес-направление и когда вложения окупятся?

• Сколько мы зарабатываем на продукте A, и не каннибализирует ли он доходы с продукта B?

• Насколько капитализация нашего бизнеса изменилась за последний год?

Помимо этого, мы принимаем (преимущественно в автоматизированном режиме) множество операционных решений:

• Информацию о каком продукте направить клиенту в SMS-рассылке?

• С каким приоритетом обслужить клиентов в условиях ограниченных ресурсов?

• Какую оптимальную цену предложить клиенту за потребляемые услуги?

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

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

Как мы узнаём, какая музыка играет в кино

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

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

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

Меня зовут Алексей Царёв, я занимаюсь развитием технологий в развлекательных сервисах Яндекс. И моя задача в том, чтобы из какой-то отдельно взятой технологии создавать рабочие продукты для конечного пользователя. Именно об этом, на примере распознавания музыки в фильмах, и будет этот пост.

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

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

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

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

Что такое gRPC? 

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

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

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

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

Информация

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