Как стать автором
Обновить
54
0
Волосатов Евгений @FFormula

Программист и Преподаватель

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

SwiftUI: Разбираемся с identity на примере переходов

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

Концепция идентификации (identity) в SwiftUI не так проста, как могло бы показаться на первый взгляд. Один из лучших способов разобраться в ней — понять роль идентичности в переходах (transitions).

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

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

Сообщаются ли ваши тесты?

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

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

С тех пор как мы это поняли, автоматические тесты стали просто необходимы. Это привело к массовому внедрению шаблонов для старта работы. Однако просто начать работу недостаточно.

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

Что нового в Apache Spark 3.4.0 — Spark Connect — Доработки для Shuffle

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

Spark Connect — это, пожалуй, самая ожидаемая фича Apache Spark 3.4.0. Она была анонсирована на конференции Data+AI Summit 2022 и сейчас широко освещается в социальных сетях. Вот и я решил приобщиться и внести свой небольшой вклад в это дело, продемонстрировав вам несколько интересных деталей реализации.

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

Паттерн Одиночка

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

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

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

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

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

Веб- и мобильная автоматизация в CI-среде

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

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

Эта статья является продолжением первой, в которой я рассказывал об основах Cucumber BDD с Selenium и Java. 

Без лишних слов, let’s CI, что я подготовил сегодня.

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

Observability. Часть 1, про логи

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

"Пираты журнального моря"

Автор — Игорь Овсянников, декабрь 2023 г. DevOps инженер в GFN.AM, преподаватель курса DevOps в OTUS.

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

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

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

Внедрение зависимостей с использованием монады Cats-effect Resource

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

Монада Cats-effect Resource предоставляет отличную монадическую абстракцию над паттерном try-with-resource. Например, она позволяет управлять жизненным циклом зависимостей, включая закрытие/финализацию ресурса, когда он больше не нужен (закрытие соединения с базой данных, освобождение кэша при завершении работы). В сочетании с компонуемостью монад это стало очень популярным подходом для управления зависимостями — до такой степени, что такие библиотеки Scala, как http4s, предоставляют свои зависимости обернутыми в монаду Resource.

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

Как выбрать тимлида в команду

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

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

Это и многое другое в статье. Прошу под кат.

Читать далее
Всего голосов 27: ↑19 и ↓8+17
Комментарии11

Алгоритмы быстрого возведения в степень

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

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

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

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

Отладка дедлока FUSE в ядре Linux

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

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

Проблема, описываемая далее, была связана с ndrive — внутренней файловой системой, реализованной с помощью FUSE. Я расскажу, как я копался в /proc в поисках причины, и узнал, как на самом деле работает wait в ядре.

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

Переменные окружения в Node.js: полное руководство

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

В этой статье мы рассмотрим переменные окружения (environment variables) в NodeJs с примерами. По сути, это пары ключ-значение набора данных, которые хранятся на уровне операционной системы. Они важны, поскольку отвечают за: разделение проблем, безопасность, переносимость, масштабируемость, совместимость, интероперабельность.

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

LIME и SHAP

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

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

Методы к LIME (Local Interpretable Model-agnostic Explanations) и SHAP (SHapley Additive exPlanations), позволяют получить понимание решений, принятых сложными моделями.

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

Программно-определяемые сети SD-WAN

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

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

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

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

Как создать приложение для чата в реальном времени с помощью React, Node, Socket.io и HarperDB

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

Статья посвящена созданию приложения для чата в реальном времени с чат-комнатами, с использованием Socket.io и HarperDB. Научимся на практике создавать полнофункциональные приложения, в которых бэкэнд может взаимодействовать с фронтендом в реальном времени. Руководство будет особенно полезно для начинающих веб-разработчиков.

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

Паттерн Circuit Breaker

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

Привет, Хабр!

Каждая секунда простоя может стоить компании целое состояние, важно иметь надежные механизмы защиты от сбоев. Здесь и приходит на помощь паттерн Circuit Breaker.

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

Этот паттерн основывается на трех основных состояниях: закрытое, открытое и полуоткрытое.

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

CatBoost

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

Добрый день, уважаемые читатели Хабра!

CatBoost – алгоритм, разработанный специалистами из Yandex, представляет собой нечто большее, чем просто ещё один инструмент в арсенале данных науки. CatBoost – это гармоничное сочетание инноваций и эффективности, особенно когда дело доходит до работы с категориальными данными.

Первые шаги CatBoost были сделаны в 2017 году, когда мир уже знал о таких гигантах, как XGBoost и LightGBM. В чем же заключается уникальность CatBoost? Его разработка была направлена на решение специфических проблем, связанных с категориальными данными – той самой головной боли многих специалистов в области машинного обучения. С тех пор CatBoost прошёл долгий путь развития и совершенствования, став не просто эффективным инструментом, но и частью больших исследовательских проектов в различных сферах от финансов до биоинформатики.

CatBoost выделяется на фоне других алгоритмов градиентного бустинга благодаря ряду ключевых особенностей:

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

Кто такой IT-Recruiter?

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

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

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

Специализация IT-рекрутер является одной из специализаций профессии рекрутера. Его специфика заключается в том, что он работает в сегменте IT и проводит найм кандидатов по следующим профессиями:

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

Концепция RAII (Resource Acquisition Is Initialization)

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

Здравствуй, Хабр!

RAII (Resource Acquisition Is Initialization) - это важная концепция в C++. Она представляет собой парадигму управления ресурсами, которая способствует безопасности и эффективности кода. В основе RAII лежит идея связывания жизненного цикла ресурса (например, памяти, файлового дескриптора или других ресурсов) с жизненным циклом объекта в C++. Это означает, что ресурсы выделяются и освобождаются автоматически при создании и уничтожении объектов.

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

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

Как преодолеть спад после запуска на примере Merge Garden

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

Случай с Merge Garden очень интересен. Эта игра, сочетающая match-3 основу с мержем, изначально была запущена на мировой рынок во второй половине 2020 года. Как раз тогда, когда рынок был перегрет из-за продолжительного карантина, а механика мержа стала новым трендом среди игроков.

Игра выглядела многообещающе и быстро достигла выручки в 2 миллиона долларов в месяц — впечатляющая цифра для небольшой финской студии. Однако как только приобретение стало официальным, показатели игры достигли плато, после чего несколько лет не падали и не росли. Чтобы понять, какие изменения привели игру к тому, что после запуска она оказалась на том уровне, на котором находится сейчас, нам следует обратить внимание на две вещи:

— Что из себя представляет игра Merge Gardens?
— И какой она была до 2023 года?

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

Проблемы согласованности данных в микросервисах и их решение

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

Привет, Хабр!

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

Но не всё так просто. Одной из ключевых проблем, с которыми сталкиваются при переходе от монолитных архитектур к микросервисным, является обеспечение согласованности данных.

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

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

Информация

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