Pull to refresh
0
0
Георгий @MrMaddy99

Инди-разработчик

Send message

Навигация в кроссплатформенном приложении на .NET Core с сохранением состояния на диск на примере ReactiveUI и Avalonia

Reading time18 min
Views21K



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


MVVM фреймворк ReactiveUI предлагает сохранять состояние приложения путём сериализации графа моделей представления в момент приостановки программы, при этом механизмы определения момента приостановки различаются для фреймворков и платформ. Так, для WPF используется событие Exit, для Xamarin.Android — ActivityPaused, для Xamarin.iOS — DidEnterBackground, для UWP — перегрузка OnLaunched.


В данном материале рассмотрим использование ReactiveUI для сохранения и восстановления состояния ПО с GUI, включая состояние роутера, на примере кроссплатформенного GUI фреймворка Avalonia. Материал предполагает наличие базовых представлений о шаблоне проектирования MVVM и о реактивном программировании в контексте языка C# и платформы .NET у читателя. Последовательность действий, описанная в статье, применима к ОС Windows 10 и Ubuntu 18. Код проекта, описанного в статье, доступен на GitHub.

Приступим!
Total votes 31: ↑30 and ↓1+29
Comments0

Запись звука и отображение громкости на Android

Reading time4 min
Views7.3K
Всем привет! Меня зовут Юрий Дорофеев, я Android-разработчик и преподаватель в Mail.ru Group. Если вы когда-нибудь записывали аудиосообщения, то видели, как анимируется интерфейс в зависимости от громкости вашего голоса. Давайте повторим этот эффект:


Читать дальше →
Total votes 16: ↑15 and ↓1+25
Comments4

«Меняем коней на переправе»: опыт замены компонентов Kubernetes на работающем кластере

Reading time11 min
Views6.3K

Fix by MacRebisz

Привет, я Андрей Квапил, Solution Architect в компании «Флант». Моя специализация — архитектурные решения на базе Kubernetes, в том числе на bare metal, а также разработка и эксплуатация облачных платформ и software-defined storage. 

В Kubernetes часто можно столкнуться с ограничениями, immutable-полями и прочими особенностями. Я хочу показать, что при необходимости такие ограничения можно обходить, а также познакомить вас с паттерном controller и наглядно продемонстрировать работу CNI-, CSI- и CRI-плагинов.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments1

C#: Автоматизация Android без посредников (adb)

Reading time6 min
Views17K

Часто приходится автоматизировать то или действие, андроид приложения не являются исключениями.Конечно, все в этом случае прибегают к различным фреймворкам - Appium, Detox, UI Automator, Ranorex, но все эти приложения созданы для тестирования, соответственно потребляют больше ресурсов и их скорость оставляет желать лучшего.Однако есть выход - автоматизировать приложения напрямую с adb, для этого я и дописал эту библиотеку. Она ничем не уступает по возможностям этим фреймворкам , но при этом является достаточно простой и легко разворачиваемой на любой машине. Об этой библиотеке и пойдет речь в статье.

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments8

База данных с 1 трлн записей и опыт использования отображаемых на память файлов

Reading time4 min
Views6.3K

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

По счастью, моя БД не совсем обычная: размер записи всего 1 бит. В базе должны храниться данные о простых числах. Соответственно, вместо того, чтобы хранить сами числа, проще хранить один бит (1 - простое число, 0 - композитное). И тогда, чтобы хранить один триллион битов, нужно всего 116 ГБайт.

Однако сделав такой файл, мы получили только лишь хранилище, но не собственно БД. Нам нужен код, который будет записывать и считывать данные. Традиционный FileStream был отброшен сразу, по причине его медленности. Постоянное чередование Seek и чтения/записи по 1 байту даёт результат примерно в 100 раз худший, чем сопоставленные в памяти файлы, опытом использования которых я и хочу поделиться в этой статье.

Читать далее
Total votes 7: ↑6 and ↓1+8
Comments33

AccessUSB: «флешка всевластия» для телевизоров LG

Reading time7 min
Views51K

Многие современные телевизоры имеют скрытые сервисные меню, через которые можно посмотреть и изменить различные параметры, недоступные в обычном пользовательском меню. В телевизорах LG есть 2 основных сервисных меню - InStart и EzAdjust, которые можно вызвать посылкой "секретных" ИК кодов, отсутствующих на обычном пульте. Подробности о том, как открыть эти меню, легко найти в интернете, не буду на этом останавливаться, один из вариантов - в этой статье. К сожалению, многие интересные опции в сервисных меню были недоступны для изменения.

В меню InStart меня заинтересовала строка Access USB Status. Гугление не давало никакой информации о том, что это за Access USB, но интуиция подсказывала, что это что-то интересное.

Читать далее
Total votes 186: ↑186 and ↓0+186
Comments46

Отладка приложений Node.js в Kubernetes?

Reading time6 min
Views3.9K

Зачем вам это нужно?

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

Читать далее
Total votes 7: ↑4 and ↓3+2
Comments1

K8S для начинающих. Часть вторая

Reading time7 min
Views34K

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

Читать далее
Total votes 6: ↑6 and ↓0+6
Comments2

Как безопасно завершить работу пода в Kubernetes: разбираемся с graceful shutdown и zero downtime деплоймент

Reading time14 min
Views20K

Landing deck by maciejkuciara

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

Команда Kubernetes aaS VK Cloud Solutions перевела статью о том, как безопасно завершить работу пода.

Основные термины из статьи:

Graceful shutdown — предсказуемое окончание работы системы, когда все запущенные процессы корректно завершают работу без потери данных или негативного пользовательского опыта.

Zero downtime deploy — нулевой простой во время развертывания новой версии приложения. Пользователь не заметит его недоступности.

Понятная схема, которая показывает, что происходит в кластере при удалении пода (PDF).
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments3

День Нептуна. Вспоминаем загадочную Windows Neptune

Reading time8 min
Views20K

Представление о том, что в Microsoft создают операционные системы последовательно, одну за одной, как эпизоды в телесериале (да и те далеко не всегда снимают по порядку) — не совсем верно. Работа над следующей версией Windows порой стартует едва ли не одновременно с началом разработки текущей, просто занимаются этими проектами разные команды. Так произошло и в самом конце 90-х: ещё не вышла легендарная Windows 2000, а в Microsoft уже вовсю проектировали ОС, которая должна была прийти ей на смену. Так появился проект Neptune — самая загадочная версия Windows, которую всё ещё можно отыскать на торрентах, установить и протестировать на своём компьютере.
Читать дальше →
Total votes 87: ↑87 and ↓0+87
Comments11

Module Federation: простая загрузка динамических модулей

Reading time8 min
Views14K

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

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

Читать далее
Total votes 18: ↑18 and ↓0+18
Comments12

Видеореклама под капотом: что такое VAST?

Reading time11 min
Views25K
Что такое VAST


Каждый день мы в том или ином виде сталкиваемся с рекламой: на сайтах — с тизерной, в блогах — c нативной, во ВКонтакте и Яндекс.Музыке — c аудиорекламой, на YouTube, стриминговых сервисах и в онлайн-кинотеатрах — с видео. О последней и пойдет речь.

В этой статье я расскажу, как работает видеореклама в интернете, и какими спецификациями она описывается.
Читать дальше →
Total votes 7: ↑6 and ↓1+9
Comments6

Защищаем удаленный сервер на Windows как можем

Reading time7 min
Views48K


Тема безопасности сервера Windows не раз поднималась, в том числе и в этом блоге. Тем не менее мне хотелось бы еще раз освежить в памяти старые методы защиты и рассказать о малоизвестных новых. Разумеется, будем использовать по максимуму встроенные средства.


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

Давайте его защищать.
Total votes 15: ↑15 and ↓0+15
Comments5

Перегрузка в C++. Часть III. Перегрузка операторов new/delete

Reading time11 min
Views23K

Продолжаем серию «C++, копаем вглубь». Цель этой серии — рассказать максимально подробно о разных особенностях языка, возможно довольно специальных. Эта статья посвящена перегрузке операторов new/delete. Это третья статья из серии, первая, посвященная перегрузке функций и шаблонов, находится здесь, вторая, посвященная перегрузке операторов, находится здесь. Статья завершает цикл из трех статей, посвященный перегрузке в C++.

Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments14

Dynamic Delivery в многомодульных проектах (часть 1)

Reading time9 min
Views9K


Привет! Меня зовут Юрий Влад, я Android-разработчик в компании Badoo и занимаюсь внедрением Dynamic Features в наши проекты.


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


В первой части статьи я подробнее расскажу о Dynamic Delivery и его API: как загружать и удалять модули. Во второй части — разберу на примере, как я использовал Dynamic Delivery в нашем приложении и получил экономию на размере приложения в полмегабайта.

Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments6

IdentityServer4. Основные понятия. OpenID Connect, OAuth 2.0 и JWT

Reading time5 min
Views38K

Этим постом я хочу открыть ветку статей посвященную IdentityServer4. Начнем мы с основных понятий.


Самым перспективным на текущий момент протоколом аутентификации является OpenID Connect, а протоколом авторизации (предоставления доступа) является OAuth 2.0. IdentityServer4 реализует эти два протокола. Он оптимизирован для решения типичных проблем безопасности.

Читать дальше →
Total votes 7: ↑5 and ↓2+5
Comments22

Прототип многопользовательской игры за 3 вечера?

Reading time25 min
Views6.4K

И снова здравствуйте! Часто ли вам в голову приходили идеи проектов, которые буквально мешали вам спать? То чувство, когда ты волнуешься, переживаешь и не можешь нормально работать над другими вещами. У меня такое бывает несколько раз в год. Какие-то идеи пропадают сами собой после углубления в тему и понимания, что извлечь пользу из такого начинания будет крайне сложно. Но есть такие идеи, развивая которые даже пару часов, захватывают меня настолько, что аж кушать не могу. Этот пост о том, как мне удалось воплотить одну из таких идей за пару вечеров после работы и не помереть с голоду. А ведь сама идея изначально звучало довольно амбициозно — PvP игра, в которой игроки соревнуются друг с другом, отвечая на вопросы.


Читать дальше →
Total votes 3: ↑2 and ↓1+3
Comments5

gRPC в качестве протокола межсервисного взаимодействия. Доклад Яндекса

Reading time16 min
Views217K
gRPC — опенсорсный фреймворк для удаленного вызова процедур. В Яндекс.Маркете gRPC используется как более удобная альтернатива REST. Сергей Федосеенков, который руководит службой разработки инструментов для партнеров Маркета, поделился опытом использования gRPC в качестве протокола для построения интеграций между сервисами на Java и C++. Из доклада вы узнаете, как избежать частых проблем, если вы начинаете использовать gRPC после REST, как возвращать ошибки, реализовать трассировку, отлаживать запросы и тестировать вызовы клиентов. В конце есть неофициальная запись доклада.

— Сначала хотелось бы познакомить вас с некоторыми фактами про Яндекс.Маркет, они будут полезны в рамках доклада. Первый факт: мы пишем сервисы на разных языках. Это накладывает требования по наличию клиентов для сервисов.
Читать дальше →
Total votes 28: ↑24 and ↓4+30
Comments12

Вывод информации об исключениях перед аварийным выходом

Reading time5 min
Views4.1K

Зачем и для чего


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

Читать дальше →
Total votes 5: ↑4 and ↓1+5
Comments4

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Date of birth
Registered
Activity