Pinned Repositories
AdvancedXml.HW
en_cx
HW.AOP
HW.Debugging
По адресу \\_________\.NET Mentroring\2015\Debugging\CrackMe.exe расположен файл, который проверяет правильность введенного кода. Используя приемы отладки найдите правильный код или напишите свой кодо-генератор.
HW.Profiling
Profiling task (main) Для генерации хэш-пароля используется следующий метод:public string GeneratePasswordHashUsingSalt(string passwordText, byte[] salt) { var iterate = 10000; var pbkdf2 = new Rfc2898DeriveBytes(passwordText, salt, iterate); byte[] hash = pbkdf2.GetBytes(20); byte[] hashBytes = new byte[36]; Array.Copy(salt, 0, hashBytes, 0, 16); Array.Copy(hash, 0, hashBytes, 16, 20); var passwordHash = Convert.ToBase64String(hashBytes); return passwordHash; } Попытайтесь не уменьшая количество итераций, которые содержаться в переменной iterate ускорить работу метода. Profiling 2 - task Напишите пример приложения, вызывающего утечки управляемой и неуправляемой памяти. Укажите способы их устранения.
LearnWebhookTest
MessageQueues.HW
Общее В данной работе мы несколько расширим службу автоматического занесения документов, которую разрабатывали в модуле Windows Services. Традиционно принято подобного рода системы разбивать на отдельные независимые службы, которые могут устанавливаться как на один компьютер, так и на разные. Например, может существовать следующая конфигурация: • Сервера захвата (ввода) документов. Обычно их бывает несколько, и они устанавливаются на разные компьютеры – туда, где происходит ввод документов (изображений). Их задача – собирать документы и передавать на сервера трансформации • Сервера трансформации. Их также может быть несколько, но по другой причине – таким образом балансируют нагрузку. Такие сервера могут производить различные типы обработок: конвертация, извлечение текста (OCR), отправка в СЭД, … • Центральный управляющий сервер. Как правило он один и его задача – мониторинг состояния работы остальных серверов и передавать им настройки. Мы будем реализовывать чуть более простую модель. Примечание!!! Прежде чем приступать к выполнению задания, рекомендуется обсудить с ментором детали реализации: • Какую использовать очередь сообщений (MSMQ/RabbitMQ/…) • Архитектуру решения (где, сколько и каких очередей использовать, …). Задание 1. - Выделение Capture Agents Разделите вашу службу на несколько независимых модулей (служб): • Центральный сервис обработки и занесения в СЭД (один). • Служба(ы) захвата документов. (Здесь на ваше усмотрение – либо один агент, реализующий все виды захвата, либо два: один для захвата отдельных документов и второй - для захвата последовательных изображений). Службы захвата собирают документы и передают центральному серверу. Для передачи используется механизм очередей сообщений. Для упрощения архитектуры примем, что в сети одновременно могут работать несколько агентов (на разных компьютерах), но только 1 центральный сервис. Задание 2. - Механизм удаленного управления Также все компоненты должны поддерживать механизм удаленного управления. Данный механизм должен позволять: • Менять настройки служб (какие конкретно параметры – на ваше усмотрение, например, для служб захвата можно сделать настройку папок слежения, а для сервера преобразований и отправки – место в СЭД, куда заносится документ). • Получать текущие настройки по запросу. • Получать текущий статус работы по запросу. (Статус может включать в себя, например, статистику текущего сеанса: сколько документов обработано, сколько было ошибок, есть ли сейчас что-то в работе, …) Механизм управления также реализовать поверх очередей сообщений. Для упрощения работы с механизмом реализовать клиентскую библиотеку (которая будет скрывать от разработчика особенности протокола работы с серверами). Библиотека должна позволять: • Обнаруживать все развернутые в сети службы (как агенты, так и центральный сервер) • Посылать и принимать (в зависимости от типа службы), перечисленные выше команды и статусы Задание 3. - Параллельная обработка Ввести в сервер обработки возможность параллельной обработки пришедших документов. Для регулировки процесса использовать локальную очередь сообщений, т.е.: • Все пришедшие задания ставятся в очередь обработки (для снижения нагрузки на очередь тела документов можно хранить на диске, а в очередь помещать только описатели) • Обработчики (количество которых задается настройкой) слушают очередь и извлекают свои задания • Если в процессе обработки происходит нефатальная ошибка (ошибка, которая может исправиться в дальнейшем – например, нет связи с СЭД), задание возвращается обратно в очередь. • Если служба будет остановлена раньше, чем закончатся задания – он продолжит их обработку при следующем запуске. Допустимы следующие варианты реализации обработчиков (выбираете сами): • Многопоточная – каждый обработчик в своем потоке • Многопроцессная – обработчик вынесен в отдельный исполнимый файл. Служба обработки сама не выполняет полезную работу, а служит только диспетчером. Т.е. запускает требуемое количество процессов обработки, перезапускает, если процесс падает и корректно останавливает (а не убивает!) если останавливают саму службу.
MultiThreading.HW
Sandcastle-Sample
Sample for Sandcastle (SHFB) documentation
UnmanagedCode.HW
misiam's Repositories
misiam/en_cx
misiam/Sandcastle-Sample
Sample for Sandcastle (SHFB) documentation
misiam/UnmanagedCode.HW
misiam/AdvancedXml.HW
misiam/HW.AOP
misiam/HW.Debugging
По адресу \\_________\.NET Mentroring\2015\Debugging\CrackMe.exe расположен файл, который проверяет правильность введенного кода. Используя приемы отладки найдите правильный код или напишите свой кодо-генератор.
misiam/HW.Profiling
Profiling task (main) Для генерации хэш-пароля используется следующий метод:public string GeneratePasswordHashUsingSalt(string passwordText, byte[] salt) { var iterate = 10000; var pbkdf2 = new Rfc2898DeriveBytes(passwordText, salt, iterate); byte[] hash = pbkdf2.GetBytes(20); byte[] hashBytes = new byte[36]; Array.Copy(salt, 0, hashBytes, 0, 16); Array.Copy(hash, 0, hashBytes, 16, 20); var passwordHash = Convert.ToBase64String(hashBytes); return passwordHash; } Попытайтесь не уменьшая количество итераций, которые содержаться в переменной iterate ускорить работу метода. Profiling 2 - task Напишите пример приложения, вызывающего утечки управляемой и неуправляемой памяти. Укажите способы их устранения.
misiam/LearnWebhookTest
misiam/MessageQueues.HW
Общее В данной работе мы несколько расширим службу автоматического занесения документов, которую разрабатывали в модуле Windows Services. Традиционно принято подобного рода системы разбивать на отдельные независимые службы, которые могут устанавливаться как на один компьютер, так и на разные. Например, может существовать следующая конфигурация: • Сервера захвата (ввода) документов. Обычно их бывает несколько, и они устанавливаются на разные компьютеры – туда, где происходит ввод документов (изображений). Их задача – собирать документы и передавать на сервера трансформации • Сервера трансформации. Их также может быть несколько, но по другой причине – таким образом балансируют нагрузку. Такие сервера могут производить различные типы обработок: конвертация, извлечение текста (OCR), отправка в СЭД, … • Центральный управляющий сервер. Как правило он один и его задача – мониторинг состояния работы остальных серверов и передавать им настройки. Мы будем реализовывать чуть более простую модель. Примечание!!! Прежде чем приступать к выполнению задания, рекомендуется обсудить с ментором детали реализации: • Какую использовать очередь сообщений (MSMQ/RabbitMQ/…) • Архитектуру решения (где, сколько и каких очередей использовать, …). Задание 1. - Выделение Capture Agents Разделите вашу службу на несколько независимых модулей (служб): • Центральный сервис обработки и занесения в СЭД (один). • Служба(ы) захвата документов. (Здесь на ваше усмотрение – либо один агент, реализующий все виды захвата, либо два: один для захвата отдельных документов и второй - для захвата последовательных изображений). Службы захвата собирают документы и передают центральному серверу. Для передачи используется механизм очередей сообщений. Для упрощения архитектуры примем, что в сети одновременно могут работать несколько агентов (на разных компьютерах), но только 1 центральный сервис. Задание 2. - Механизм удаленного управления Также все компоненты должны поддерживать механизм удаленного управления. Данный механизм должен позволять: • Менять настройки служб (какие конкретно параметры – на ваше усмотрение, например, для служб захвата можно сделать настройку папок слежения, а для сервера преобразований и отправки – место в СЭД, куда заносится документ). • Получать текущие настройки по запросу. • Получать текущий статус работы по запросу. (Статус может включать в себя, например, статистику текущего сеанса: сколько документов обработано, сколько было ошибок, есть ли сейчас что-то в работе, …) Механизм управления также реализовать поверх очередей сообщений. Для упрощения работы с механизмом реализовать клиентскую библиотеку (которая будет скрывать от разработчика особенности протокола работы с серверами). Библиотека должна позволять: • Обнаруживать все развернутые в сети службы (как агенты, так и центральный сервер) • Посылать и принимать (в зависимости от типа службы), перечисленные выше команды и статусы Задание 3. - Параллельная обработка Ввести в сервер обработки возможность параллельной обработки пришедших документов. Для регулировки процесса использовать локальную очередь сообщений, т.е.: • Все пришедшие задания ставятся в очередь обработки (для снижения нагрузки на очередь тела документов можно хранить на диске, а в очередь помещать только описатели) • Обработчики (количество которых задается настройкой) слушают очередь и извлекают свои задания • Если в процессе обработки происходит нефатальная ошибка (ошибка, которая может исправиться в дальнейшем – например, нет связи с СЭД), задание возвращается обратно в очередь. • Если служба будет остановлена раньше, чем закончатся задания – он продолжит их обработку при следующем запуске. Допустимы следующие варианты реализации обработчиков (выбираете сами): • Многопоточная – каждый обработчик в своем потоке • Многопроцессная – обработчик вынесен в отдельный исполнимый файл. Служба обработки сама не выполняет полезную работу, а служит только диспетчером. Т.е. запускает требуемое количество процессов обработки, перезапускает, если процесс падает и корректно останавливает (а не убивает!) если останавливают саму службу.
misiam/MultiThreading.HW
misiam/netflix_js
misiam/UIPath_Test
misiam/WindowsServices.HW
misiam/xpressionsAndIQueryable.HW.ExpressionVis
Создайте класс-трансформатор на основе ExpressionVisitor, выполняющий следующие 2 вида преобразований дерева выражений: - Замену выражений вида <переменная> + 1 / <переменная> - 1 на операции инкремента и декремента - Замену параметров, входящих в lambda-выражение, на константы (в качестве параметров такого преобразования передавать: - Исходное выражение - Список пар <имя параметра: значение для замены> Для контроля полученное дерево выводить в консоль или смотреть результат под отладчиком, использую ExpressionTreeVisualizer, а также компилировать его и вызывать полученный метод.