Как стать автором
Обновить
0
0
Георгий @MrMaddy99

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

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

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

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



Пользовательские интерфейсы современных прикладных приложений, как правило, сложны — зачастую необходимо реализовывать поддержку постраничной навигации, обрабатывать разного рода поля ввода, на основе выбранных пользователем параметров отображать или скрывать информацию. При этом, для улучшения 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.

Приступим!
Всего голосов 31: ↑30 и ↓1+29
Комментарии0

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

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


Читать дальше →
Всего голосов 16: ↑15 и ↓1+25
Комментарии4

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

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

Fix by MacRebisz

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Landing deck by maciejkuciara

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Время на прочтение11 мин
Количество просмотров24K
Что такое VAST


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

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

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

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


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


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

Давайте его защищать.
Всего голосов 15: ↑15 и ↓0+15
Комментарии5

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

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

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

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

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

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


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


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


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

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

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

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

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


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

Читать дальше →
Всего голосов 7: ↑5 и ↓2+5
Комментарии22

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

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

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


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

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

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

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

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

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

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


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

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

Информация

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