Pull to refresh
76
0
Zaur Nasibov @BasicWolf

Software Engineer

Send message

Использование алгоритма Прима для генерации соединённых друг с другом пещер

Reading time4 min
Views14K


Я решил объяснить один из алгоритмов генерации карты, используемых в моей игре In the House of Silence. Главное преимущество этого способа заключается в том, что в отличие от других алгоритмов, он никаким образом не может сгенерировать карту с разделёнными частями.

Генерация идеального лабиринта



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

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

Как удалить «неудаляемые» приложения со смартфона

Reading time5 min
Views277K


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

Оказывается, некоторые программы невозможно удалить. Например, на отдельных моделях Samsung невозможно удалить Facebook (есть только опция 'disable'). Говорят, на Samsung S9 вдобавок предустановлены «неудаляемые» приложения Microsoft.

Эти смартфоны приведены для примера. Такая же проблема и на других моделях. На многих есть неудаляемые программы от самого производителя.

Всё это надо зачистить.
Читать дальше →

Как определять собственные классы исключений в Python

Reading time7 min
Views40K
Привет, Хабр!

Ваш интерес к новой книге "Секреты Python Pro" убедил нас, что рассказ о необычностях Python заслуживает продолжения. Сегодня предлагаем почитать небольшой туториал о создании кастомных (в тексте — собственных) классах исключений. У автора получилось интересно, сложно не согласиться с ним в том, что важнейшим достоинством исключения является полнота и ясность выдаваемого сообщения об ошибке. Часть кода из оригинала — в виде картинок.

Добро пожаловать под кат.
Читать дальше →

Как мы в СберМаркете боремся с товарами-призраками

Reading time4 min
Views9.7K

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

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

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

Рассказываем, как мы внедрили алгоритм автоматического отключения таких «‎призраков»‎ и уменьшили долю ненайденных товаров на 25%.

Читать далее

Блеск и нищета модели предметной области

Reading time28 min
Views61K


Мартин Фаулер в книге «Patterns of Enterprise Application Architecture» описывает «Модель предметной области (Domain Model)» как сложный подход к организации бизнес-логики. Метод заключается в создании классов, соответствующих объектам предметной области из реального мира как с точки зрения структуры данных, так и поведения. При этом технические аспекты, такие как хранение данных, аутентификация и авторизация, управление транзакциями, выносится за пределы слоя бизнес-логики. Паттерн реализуется одним из двух способов:

  1. Богатая (насыщенная) модель — данные и поведение инкапсулируются внутри объектов предметной области.
  2. Анемичная модель — в объектах предметной области инкапсулируются только данные, поведение (методы) выносится в отдельный слой сервисов.

Фаулер и Эванс считают анемичную модель анти-паттерном. Однако многие кодовые базы, с которыми мне доводилось работать, реализованы именно в стиле «анемичной» модели. Под катом расшифровка и видео моего доклада с DotNext 2019 Moscow, посвященного сравнению сильных и слабых сторон обоих подходов и не очевидным деталям реализации модели предметной области в парадигме ООП и в функциональном стиле.
Читать дальше →

Trunk Based Development и Spring Boot, или ветвись оно все по абстракции

Reading time15 min
Views12K

Всем привет!

Закончилась осень, зима вступила в свои законные права, листья уже давно опали и перепутанные ветви кустарников наталкивают меня на мысли о моём рабочем Git репозитории… Но вот начался новый проект: новая команда, чистый, как только что выпавший снег, репозиторий. "Тут все будет по другому" - думаю я и начинаю "гуглить" про Trunk Based Development.

Если у вас никак не получается поддерживать git flow, вам надоели кучи этих непонятных веток и правил для них, если в вашем проекте появляются ветки вида "develop/ivanov", то добро пожаловать в под кат! Там я пробегусь по основным моментам Trunk Based Development и расскажу о том, как реализовать такой подход, используя Spring Boot.

Читать далее

Принцип слоеного теста

Reading time12 min
Views6K
Всем неустрашимым на пути от отрицания до убеждения посвящается…

image

Среди разработчиков бытует справедливое мнение, что если программист не покрывает код тестами, то попросту не понимает зачем они нужны и как их готовить. С этим трудно не согласиться, когда уже понимаешь о чем речь. Но как достичь этого драгоценного понимания?
Читать дальше →
Наш конкурс технических статей «ТехноТекст» на финишной прямой: шорт-листы по всем 23 номинациям на оценке у жюри, а мы готовимся объявлять лучших — 23 декабря с 18:00 в прямом эфире Vkontakte, на Facebook и на YouTube. Но в некоторых категориях у нас будет два победителя, и второго выберете вы.
Выберите того, кто больше всех заслуживает награды

Базы данных. Тенденции общемировые и в России

Reading time33 min
Views50K

Эта статья не является ответом на множество вопросов по базам данных (БД) и системам управлениям базами данных (СУБД). Я как автор выражаю своё собственное мнение о  трендах, стараясь опираться на беспристрастные показатели, статистики и т.д., но для примера приводя собственный опыт. Я не являюсь ангажированным представителем какой-либо компании и выражаю точку зрения опираясь на опыт более 25 лет работы с разными СУБД, в том числе, которую создавал своими руками. Не так много даже опытных программистов и архитекторов, которые знают все термины, технологии, какие подводные камни и куда идёт движение. Тема поистине огромная, поэтому в рамках одной статьи не раскрыть даже верхний уровень информации. Если кто-то не встретит свою любимую СУБД или её невероятный плюс, который стоит упомянуть, то прошу в комментариях указать и этим дополнить общую картину, что поможет другим разобраться и понять лучше предметную область. Поехали!

Open Source DBMS vs Commercial DBMS

 Для начала приведён график с сайта, db-engines.com, по моим ощущениям, неплохо отслеживающим тренды БД. Именно этот график добавил желания написать статью о текущем положении дел.

Читать далее (в конце краткие итоги)

Вам не нужны юнит-тесты

Reading time7 min
Views28K

Да, вы не ослышались – именно так! В IT-сообществе прочно укоренилось мнение, что все эти тесты вам хоть как-то помогают, но так ли это на самом деле? Вы сами пробовали мыслить критически и анализировать это расхожее мнение? Хипстеры придумывают кучу парадигм – TDD, BDD, ПДД, ГИБДД – лишь чтобы создать иллюзию бурной деятельности и хоть как-то оправдать свою зарплату. Но задумайтесь, что будет, если вы (либо ваши программисты) начнете все свое время уделять исключительно написанию кода? Для тестирования есть отдельное направление и целые подразделения. Вы же не заставляете программистов писать требования, так? Тогда почему они должны писать тесты? Всех согласных и несогласных прошу проследовать внутрь поста, где я вам наглядно покажу, что юнит (и интеграционные) тесты – великое зло!

Проследовать

Фракталы — это бунт против матанализа (3Blue1Brown)

Reading time3 min
Views11K
image


Фракталы — это самоподобные штуковины. Не совсем так.

Идея Мандельброта была шире. Как моделировать природу с учетом неровностей? В некотором роде, фрактальная геометрия — это бунт против классического матанализа, основная идея которого, что все будет очень гладким, если достаточно увеличить. Мандельброту это показалось чересчур идеальным, бесполезно абстрактным.

Настоящая идея фрактала имеет отношение к дробной размерности.
Читать дальше →

Внести массовые изменения в микросервисы, автоматизировать код-ревью и сберечь нервы команде

Reading time2 min
Views4.8K
Представьте ситуацию — ваше задание на работе изменить формат логирования. Сначала всё кажется просто. Ровно до того момента, пока все эти изменения не нужно вносить в 80+ микросервисах… И так легкая на первый взгляд задача превращается в длинную и рутинную. Что можно с этим делать?

Или вот еще задачка — какими фичами можно обеспечить скорость, качество и удобство code review?

Обо всём этом рассказывают Java-разработчики ЮMoney в своих докладах. Добавляйте в закладки или смотрите прямо сейчас. Видео с таймкодами уже ждут под катом.


Читать дальше →

Возможно, вам не нужно машинное обучение

Reading time2 min
Views11K

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

Корутинная эволюция в Kotlin. Чем отличаются Channels, Broadcast channels, Shared flows, State flows

Reading time5 min
Views45K
Эта публикация — перевод поста Романа Елизарова «Shared flows, broadcast channels». Опубликовано с одобрения автора оригинала. Примечания переводчика выделены курсивом.

Давным-давно в Kotlin были представлены корутины, одной из особенностей которых является легковесность (создание корутин дешевле, чем с запуск новых Threads). Мы можем запускать несколько корутин, и нам нужен способ взаимодействия между ними избегая “mutable shared state”
Читать дальше →

Пишем голосового ассистента на Python

Reading time16 min
Views188K

Введение


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

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

image
Читать дальше →

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

Reading time6 min
Views49K


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

Но в средние века не было интернета. В каждом графстве постепенно устоялся свой собственный способ написания и произношения. К примеру, слово «church» на территории Англии могли произносить 22 разными способами, а «she» — 60 вариантами. Знакомое всем «though» и вовсе имело целых 500 вариантов написаний и произношений.

Изменил все один человек — Уильям Кэкстон. Но большинство студентов, которые учат английский как иностранный, ругают этого джентльмена последними словами, когда узнают, как именно читаются слова в английском. Спойлер: как попало. И ругают его, даже если вообще никогда не слышали это имя. Мы расскажем, почему.
Читать дальше →

Квантовая теория. Вселенная из волн вероятностей

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

image Что будет, если по аналогии с двущелевым опытом, все пространство на пути частицы до экрана будет заполнено щелями?
Читать дальше →

4 главных вещи, которые я не знал перед выходом на стажировку в разработку

Reading time5 min
Views17K
Всем привет! Меня зовут Даниил, и я программист-самоучка.

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

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


Читать дальше →

С нуля до автоматизации контейнеров за 7 минут

Reading time6 min
Views3.4K

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


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


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


Вот почему мы будем использовать GitHub Actions


Читать дальше →

Как построить надежное приложение на базе Event sourcing

Reading time8 min
Views6.4K

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


Читать дальше →

Information

Rating
Does not participate
Location
Азербайджан
Registered
Activity