• X.Spectator – мониторинг состояния в .NET



      На сегодняшний день, большинство информационных систем представляют из себя комплексные решения с достаточно сложной архитектурой и большим количеством взаимных зависимостей. При работе подобных систем, в момент пиковых нагрузок часть модулей может отказать, или работать некорректно. В этом случае система перестает быть стабильной и может перестать корректно обрабатывать все входящие запросы. Для обеспечения стабильной работы системы, могут быть реализованы различные стратегии.
      Читать дальше →
      • +11
      • 4.5k
      • 6
    • Как продвигать мобильное приложение в 2019 году: 4 практических способа + полезные инструменты



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

        Сегодня мы поговорим о способах продвижения мобильного приложения – от самого старта жизни проекта до его продвинутой стадии. Также для каждого из шагов я дам ссылки на полезные в продвижении сайты и сервисы. Поехали!
        Читать дальше →
        • +14
        • 5.2k
        • 2
      • Защита ваших приложений Xamarin с помощью Dotfuscator

          Это перевод рассказа Джо Сьюэлла, разработчика из команды Dotfuscator на PreEmptiveSolutions.

          Давайте говорить честно: выпуск библиотеки, приложения для рабочего стола или мобильного приложения может стать горьким опытом. Как только вы выкладываете вашу программу в открытый доступ для всего мира, вы в определенной степени утрачиваете контроль над тем, как она используется. В частности, разработчики часто имеют дело с угрозой обратной разработки.
          На многих платформах и во многих языках известным способом защиты от обратной разработки являются инструменты запутывания кода. Например, если вы — разработчик на платформе Android, вы, возможно, уже пользуетесь ProGuard для сокращения и обфускации кода на Java.

          Теперь разработчики Xamarin имеют доступ к защите того же типа по всем основным семействам мобильных устройств, от Android и iOS до Universal Windows (UWP). Инструмент для работы называется Dotfuscator, версия Community Edition которого доступна в Visual Studio.

          Сегодня мы рассмотрим, как обфускация может защитить приложение Xamarin. Android от обратной разработки, и как вы сможете применить ту же защиту для ваших собственных приложений Xamarin всего за несколько простых шагов.
          Читать дальше →
        • 43 полезных сервиса для управления проектами. Без эпитетов

            Дано: собственные и аутсорс-проекты, некоторые участники работают удаленно.

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

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

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

            Процесс поиска очень часто усложняется тем, что все сервисы, как один, пишут «Лучший сервис, помогающий превратить ваши идеи в реальность и реализовать ваши проекты. Сегодня.». Так, а что вы делаете-то? Поэтому в этом списке без лишних эпитетов, только что какой сервис умеет. :)




            Читать дальше →
          • Авторизация в ASP.NET Core MVC


              Logo designed by Pablo Iglesias.


              В статье описаны паттерны и приемы авторизации в ASP.NET Core MVC. Подчеркну, что рассматривается только авторизация (проверка прав пользователя) а не аутентификация, поэтому в статье не будет использования ASP.NET Identity, протоколов аутентификации и т.п. Будет много примеров серверного кода, небольшой экскурс вглубь исходников Core MVC, и тестовый проект (ссылка в конце статьи). Приглашаю интересующихся под кат.


              Содержание:



              Читать дальше →
              • +28
              • 44.6k
              • 5
            • Хабраиндекс для статей по программированию под Android

                С чего начать?


                Пишем своё первое приложение на Android
                Пишем первое приложение для Android
                Создаем файловый менеджер
                Основы программирования под Android на примере игры Судоку
                Создание приложения в стиле Android
                Спокойной ночи!

                Читать дальше →
                • +188
                • 92.8k
                • 43
              • Как распознать кракозябры?

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

                  Итак, вуаля!


                  За источник информации была взята статья из вики. В блок-схеме «UTF-16 → CP 866» означает, что исходная кодировка была «UTF-16», а распозналась она как «CP 866».

                  Как всегда — кликабельно. Исходник в .docx: здесь.
                • Руководство разработчика Prism — часть 4, разработка модульных приложений

                  • Translation
                  • Tutorial
                  Оглавление
                  1. Введение
                  2. Инициализация приложений Prism
                  3. Управление зависимостями между компонентами
                  4. Разработка модульных приложений
                  5. Реализация паттерна MVVM
                  6. Продвинутые сценарии MVVM
                  7. Создание пользовательского интерфейса
                    1. Рекомендации по разработке пользовательского интерфейса
                  8. Навигация
                    1. Навигация на основе представлений (View-Based Navigation)
                  9. Взаимодействие между слабо связанными компонентами

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

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

                  Следующая иллюстрация показывает проект модульного приложения.

                  Модульное приложение
                  Читать дальше →
                • Руководство разработчика Prism — часть 3, управление зависимостями между компонентами

                  • Translation
                  • Tutorial
                  Оглавление
                  1. Введение
                  2. Инициализация приложений Prism
                  3. Управление зависимостями между компонентами
                  4. Разработка модульных приложений
                  5. Реализация паттерна MVVM
                  6. Продвинутые сценарии MVVM
                  7. Создание пользовательского интерфейса
                    1. Рекомендации по разработке пользовательского интерфейса
                  8. Навигация
                    1. Навигация на основе представлений (View-Based Navigation)
                  9. Взаимодействие между слабо связанными компонентами

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

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

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

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

                  Читать дальше →
                • Руководство разработчика Prism — часть 2, инициализация приложений Prism

                  • Translation
                  • Tutorial
                  Оглавление
                  1. Введение
                  2. Инициализация приложений Prism
                  3. Управление зависимостями между компонентами
                  4. Разработка модульных приложений
                  5. Реализация паттерна MVVM
                  6. Продвинутые сценарии MVVM
                  7. Создание пользовательского интерфейса
                    1. Рекомендации по разработке пользовательского интерфейса
                  8. Навигация
                    1. Навигация на основе представлений (View-Based Navigation)
                  9. Взаимодействие между слабо связанными компонентами

                  Эта глава рассказывает о том, что нужно сделать для загрузки приложения Prism. Приложение Prism требует регистрации и конфигурации компонентов во время запуска – этот процесс известен как bootstrapping.

                  Что такое загрузчик (Bootstrapper)


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

                  Основные этапы процесса загрузки.
                  Читать дальше →
                • Руководство разработчика Prism — часть 9, взаимодействие между слабо связанными компонентами

                  • Translation
                  • Tutorial
                  Оглавление
                  1. Введение
                  2. Инициализация приложений Prism
                  3. Управление зависимостями между компонентами
                  4. Разработка модульных приложений
                  5. Реализация паттерна MVVM
                  6. Продвинутые сценарии MVVM
                  7. Создание пользовательского интерфейса
                    1. Рекомендации по разработке пользовательского интерфейса
                  8. Навигация
                    1. Навигация на основе представлений (View-Based Navigation)
                  9. Взаимодействие между слабо связанными компонентами

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

                  При построении модели взаимодействия между модулями, необходимо знать отличия между подходами, чтобы знать, какой из них применить в конкретном сценарии. Библиотека Prism предоставляет следующие подходы:

                  • Использование команд (Solution commanding). Используйте для реагирования на действия пользователя.
                  • Контекст региона (Region context). Используйте для передачи контекстной информации от host-элемента управления к представлениями в регионе. Этот подход в некотором роде аналогичен DataContext, но не полагается на него.
                  • Общие службы (Shared services). Вы можете вызвать метод на сервисе, который, в свою очередь, сгенерирует событие, на которое могут быть подписаны получатели. Используйте этот подход в том случае, если все остальные подходы не применимы.
                  • Агрегация событий (Event aggregation). Для передачи сообщений между моделями представлений, презентерами, или контроллерами при отсутствии ожиданий о непосредственной реакции на сообщение.

                  Читать дальше →
                  • +5
                  • 16.2k
                  • 6
                • Основы работы с модулями в Node.js

                  Любой проект посложнее «Hello World» состоит из некоторого количества файлов, по которым разносят код. Это дает возможность структурировать проект, вынести независимые части, которые можно будет использовать в других проектах и вообще сделать код нагляднее.

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

                      var authModule = require('./auth');
                  

                  Данный код подключает модуль авторизации и делает его доступным через переменную authModule.

                  В зависимости от того, какой параметр передан в функцию require, будет отличатся алгоритм подключения модуля. Так что давайте посмотрим на принципы подключения модулей в Node.js. Отмечу, что вся эта информация доступна в документации.

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

                      var http = require('http');
                      var cluster = reqiure('cluster');
                  

                  Нужно отметить, что встроенные модули имеют приоритет над всеми остальными, если в функцию require передано их название. Так к примеру, require('http') всегда вернет встроенный модуль, даже если будет сторонний модуль с таким названием или файл с таким именем. Список всех встроенных модулей и документацию по ним можно найти на сайте. Исходники этих модулей можно посмотреть в репозитории проекта.
                  Читать дальше →
                  • +20
                  • 75.2k
                  • 7
                • Чипсеты Intel 7-й серии – сравнительный обзор

                    Почти два месяца назад, 9 апреля, Intel официально объявила о выходе чипсетов новой, седьмой серии. И хотя информация об этих чипсетах обсуждалась до того в течение почти что года, думается, имеет смысл еще раз в одном тексте свести воедино все их основные характеристики и функции. Ведь одно дело – просто обсуждать, и совсем другое – после обсуждения пойти в магазин и приобрести выбранное устройство или набор комплектующих.
                    Итак, чипсеты седьмой серии (кодовое наименование Panther Point) спроектированы под процессоры нового поколения Ivy Bridge, кроме того, поддерживаются и процессоры предыдущего поколения Sandy Bridge. В целом чипсетная картина выглядит так:
                    Intel Q75 Express Chipset Настольные ПК – корпоративный сегмент
                    Intel Q77 Express Chipset
                    Intel B75 Express Chipset
                    Intel Z77 Express Chipset Настольные ПК – потребительский сегмент
                    Intel Z75 Express Chipset
                    Intel H77 Express Chipset
                    Mobile Intel HM75 Express Chipset Мобильные ПК – потребительский сегмент
                    Mobile Intel HM76 Express Chipset
                    Mobile Intel HM77 Express Chipset
                    Mobile Intel UM77 Express Chipset
                    Mobile Intel QM77 Express Chipset Мобильные ПК – корпоративный сегмент
                    Mobile Intel QS77 Express Chipset
                    Читать дальше →
                  • Руководство разработчика Prism — часть 8.1, навигация на основе представлений (View-Based Navigation)

                    • Translation
                    • Tutorial
                    Оглавление
                    1. Введение
                    2. Инициализация приложений Prism
                    3. Управление зависимостями между компонентами
                    4. Разработка модульных приложений
                    5. Реализация паттерна MVVM
                    6. Продвинутые сценарии MVVM
                    7. Создание пользовательского интерфейса
                      1. Рекомендации по разработке пользовательского интерфейса
                    8. Навигация
                      1. Навигация на основе представлений (View-Based Navigation)
                    9. Взаимодействие между слабо связанными компонентами

                    Навигация на основе представлений (View-Based Navigation)


                    Несмотря на то, что навигация на основе состояний может быть полезна в сценариях, описанных ранее, тем не менее, навигация в приложении часто требует замены одного представления на другое. В Prism, такой вид навигации называется «навигация на основе представлений (view-based navigation)».

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

                    • Цель навигации — контейнер для добавляемых, или удаляемых представлений — может обрабатывать навигацию разными способами при добавлении и удалении представлений, или может визуализировать процесс навигации по-разному. Во многих случаях, целью навигации является обычный Frame, или ContentControl, и представления просто отображаются внутри этих элементов управления. Однако существует множество сценариев, когда целью навигации является другой вид элементов управления, таких как TabControl, или ListBox. В таких случаях, навигация может потребовать активации или выделения уже существующего представления, или добавление нового представления.
                    • Приложению часто будет требоваться, каким-либо образом идентифицировать представление, к которому должна быть выполнена навигация. Для примера, в web-приложениях, страница, к которой выполняется навигация, напрямую идентифицируется по URI. В клиентских приложениях, представление может быть идентифицировано по имени его типа, по расположению файла ресурсов, или множеством других способов. В составных приложениях, состоящих из слабо связанных модулей, представления зачастую определены в раздельных модулях. Отдельные представления, в таких случаях, должны иметь возможность быть идентифицированы без создания дополнительных зависимостей между модулями.
                    • После идентификации представления, процесс его создания и инициализации должен быть тщательно скоординирован. Это особенно важно при использовании паттерна MVVM. В таком случае, представления и соответствующая модель представления должны быть созданы и ассоциированы друг с другом во время совершения навигации. В случае использования контейнера внедрения зависимостей, такого как Unity, или MEF, при создании модели представления и/или представления может потребоваться использование особого механизма конструирования.
                    • MVVM паттерн позволяет отделить UI приложения от его логики взаимодействия с пользователем и бизнес-логики. Однако процесс навигации может охватывать как UI, так и логику приложения. Пользователь может начать навигацию внутри представления, в результате чего представление будет обновлено. Но часто будет требоваться возможность инициировать и скоординировать навигацию из модели представления. Важным аспектом для рассмотрения, является способность чётко разделить навигационное поведение между представлением и моделью представления.
                    • Приложению часто может потребоваться передавать параметры, или контекст, представлению для его корректной инициализации. Для примера, если пользователь производит навигацию к представлению для редактирования информации о выбранном клиенте, ID этого клиента, или его данные, должны быть переданы в представление, для отображения в нем корректной информации.
                    • Многим приложениям необходимо тщательно координировать навигацию для уверенности, что будут выполнены определённые бизнес-требования. К примеру, пользователю может быть показано всплывающее сообщение о некорректности введённых им данных, во время попытки навигации к другому представлению. Этот процесс требует координации между предыдущим и новым представлениями.
                    • Наконец, большинство современных приложений позволяют пользователю производить навигацию к предыдущему, или к следующему представлению. Аналогично, некоторые приложения реализуют свой рабочий процесс, используя последовательность представлений, или форм и позволяют пользователю производить по ним навигацию вперёд или назад, добавляя или редактируя данные, перед тем, как завершить задачу и отправить все сделанные изменения одним пакетом. Такие сценарии требуют некоторого механизма журналирования, для того, чтобы последовательность навигации могла быть сохранена, повторена, или предопределена.

                    Prism предоставляет руководство по решению этих проблем, расширяя механизм регионов для поддержки навигации. Следующие разделы содержат краткую сводку о регионах Prism и рассказывают о том, как они были расширены для поддержки навигации на основе представлений.
                    Читать дальше →
                    • +10
                    • 17.2k
                    • 2