Как стать автором
Обновить
49
0
Михаил @om2804

Пользователь

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

Оцениваем сложность алгоритмов на C# по памяти и времени с примерами

Уровень сложностиСложный
Время на прочтение10 мин
Количество просмотров9.2K

Продолжаем говорить о производительности и оптимизации кода. Сегодня поговорим о том, как и зачем оценивать сложность алгоритмов,  а также наглядно покажем, как эта сложность влияет на производительность кода.

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

Климатическая система в квартире своими руками

Время на прочтение21 мин
Количество просмотров109K
Кто-то в детстве мечтает изобрести лекарство от рака, кто-то — стать космонавтом или владельцем свечного заводика. А я мечтал о том, что у меня появится климатическая система, и в квартире, наконец, не будет душно, вечная простуда от сквозняков исчезнет, а горло перестанет першить от сухости. И теперь мечта исполнена!

Примерно с декабря 2015 по июнь 2016 года я читал форумы, катался по строительным магазинам, собирал систему в квартире и на балконе, паял контроллер и писал прошивку — и добился своего.

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

Схема установки
А если чуть подробнее, то...
Всего голосов 87: ↑84 и ↓3+81
Комментарии290

Code Signing сертификаты или сертификаты разработчика. Виды, как выбрать

Время на прочтение5 мин
Количество просмотров81K
В прошлый раз мы рассматривали цифровые SSL сертификаты, в этот раз рассмотрим еще один вариант цифровых сертификатов.
Code Signing сертификаты — это сертификат, которым подписывается программное обеспечение или скрипты, который подтверждает автора программы и гарантирует, что код не был изменен, после того, как была наложена цифровая подпись. Также их еще называют сертификаты разработчика.

Итак сертификаты разработчика предоставляют нам несколько возможностей. Во-первых это механизм цифровой подписи, которая подтверждает, что программа, которой вы пользуетесь действительно выпущена той или иной компанией, то есть гарантирует подлинность источника. А во вторых гарантирует целостность содержимого, то есть, что с момента подписания программный продукт не был поврежден или изменен.
Виды сертификатов разработчиков и как выбрать правильный
Всего голосов 28: ↑26 и ↓2+24
Комментарии60

Моя модернизация Byndyusoft.Infrastructure | DDD + CQRS + WebApi

Время на прочтение5 мин
Количество просмотров6.5K
Всем привет! Я часто ищу в просторах интернета «идеальную архитектуру» и несколько месяцев назад наткнулся на интересную реализацию и хотел бы поделится немного дополнив его.

Ссылка на реализацию

Немного модернизации и я получил вполне универсальный рабочий шаблон.

Для всех, кто не знаком с DDD можно начать с wiki.

В конце мы получим связку с DDD + CQRS + Entity Framework + OData + WebApi + Log4Net + Castle Windsor + Kendo UI.
Читать дальше →
Всего голосов 20: ↑16 и ↓4+12
Комментарии6

Реактивные приложения с паттерном RxPM. Прощайте​ MVP и MVVM

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

Уже продолжительное время я размышляю над паттерном RxPM и даже успешно применяю его в «продакшене». Я планировал сначала выступить с этой темой на Mobius, но программный комитет отказал, поэтому публикую статью сейчас, чтобы поделиться с Android-сообществом своим видением нового паттерна.


Все знакомы с MVP и MVVM, но мало кто знает, что MVVM является логическим развитием паттерна Presentation Model. Ведь единственное отличие MVVM от PM – это автоматическое связывание данных (databinding).


В этой статье речь пойдет о паттерне Presentation Model с реактивной реализацией биндинга. Некоторые ошибочно называют его RxMVVM, но корректно будет называть его RxPM, потому что это модификация шаблона Presentation Model.


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



Читать дальше →
Всего голосов 23: ↑20 и ↓3+17
Комментарии42

Entity Framework 6 (7) vs NHibernate 4: взгляд со стороны DDD

Время на прочтение9 мин
Количество просмотров41K
В сети уже есть довольно немало сравнений Entity Framework и NHibernate, но все они по большей части фокусируются на технической стороне вопроса. В этой статье я бы хотел сравнить эти две технологии с точки зрения Domain Driven Design (DDD). Мы рассмотрим несколько примеров кода и увидим как эти две ORM позволяют нам справляться со сложностями.

Читать дальше →
Всего голосов 32: ↑25 и ↓7+18
Комментарии88

Функторы, аппликативные функторы и монады в картинках

Время на прочтение5 мин
Количество просмотров192K
Вот некое простое значение:


И мы знаем, как к нему можно применить функцию:


Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:


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


data Maybe a = Nothing | Just a

Позже мы увидим разницу в поведении функции для Just a против Nothing. Но сначала поговорим о функторах!
Читать дальше →
Всего голосов 184: ↑175 и ↓9+166
Комментарии60

Async/await и механизм реализации в C# 5.0

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

Подробно о преобразовании асинхронного кода, осуществляемого компилятором


Механизм async реализован в компиляторе C# при поддержке со стороны библиотек базовых классов .NET. В саму исполняющую среду не пришлось вносить никаких изменений. Это означает, что ключевое слово await реализовано путем преобразования к виду, который мы могли бы написать и сами в предыдущих версиях C#. Для изучения генерируемого кода можно воспользоваться декомпилятором .NET Reflector или ILSpy. Это не только интересно, но и полезно для отладки, анализа производительности и других видов диагностики асинхронного кода.
Подробности
Всего голосов 22: ↑22 и ↓0+22
Комментарии7

Как мы попробовали DDD, CQRS и Event Sourcing и какие выводы сделали

Время на прочтение9 мин
Количество просмотров77K
Вот уже около трех лет я использую в работе принципы Spec By Example, Domain Driven Design и CQRS. За это время накопился опыт практического применения этих практик на платформе .NET. В статье я хочу поделиться нашим опытом и выводами, которые могут быть полезными командам, желающим использовать эти подходы в разработке.

Факты, цифры, код
Всего голосов 39: ↑39 и ↓0+39
Комментарии45

Руководство разработчика Prism — часть 8.1, навигация на основе представлений (View-Based Navigation)

Время на прочтение24 мин
Количество просмотров22K
Оглавление
  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 и рассказывают о том, как они были расширены для поддержки навигации на основе представлений.
Читать дальше →
Всего голосов 28: ↑19 и ↓9+10
Комментарии2

Хэппи энд для хот энда, или наша сила – в плавках

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


Доброго вам времени суток, уважаемые гики и сочувствующие! О чём может мечтать холодными зимними вечерами оборудованный 3D принтером гик? Наверное, о солнечных берегах Копакабаны. Или о бездонных глазах знойных бразильянок. Но в Копакабане разгул преступности, а супруга не поддерживает идею полигамии даже в рудиментарном виде. Вот и приходится самому обеспечивать себя горячими штучками, да публиковать результаты для розжига дискуссии.
Всем страждущим нагрева - tervetullut под кат!
Всего голосов 26: ↑23 и ↓3+20
Комментарии26

Полезные мелочи с Kickstarter

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


В этом обзоре мы рассмотрим несколько проектов с Kickstarter, которые помогут сделать вашу 3D-печать еще немного лучше. Некоторые из этих проектов уже завершены в рамках Kickstarter и перешли на стадию серийного производства, другие “не взлетели” по тем или иным причинам, но могут подкинуть идейку-другую, а какие-то все еще на стадии краудфандинга и в них можно поучаствовать.
Всего голосов 12: ↑9 и ↓3+6
Комментарии12

Cicerone — простая навигация в Андроид приложении

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


На этой схеме не скелет древнего обитателя водных глубин и не схема метро какого-то мегаполиса, это карта переходов по экранам вполне реального Андроид приложения! Но, несмотря на сложность, нам удалось её удачно реализовать, а решение оформить в виде небольшой библиотеки, о которой и пойдет речь в статье.


Читать дальше →
Всего голосов 35: ↑33 и ↓2+31
Комментарии29

Китайцы собираются построить мощную солнечную электростанцию в зоне отчуждения ЧАЭС

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


Зона отчуждения Чернобыльской АЭС, ранее именовавшаяся просто «30-километровой зоной» — это запрещенная для свободного доступа территория. Она подверглась интенсивному загрязнению радионуклидами после аварии на Чернобыльской атомной электростанции. Зона включает в себя несколько прилегающих регионов, включая север Иванковского района и север Полесского района Киевской области, плюс несколько других регионов. На территории запрещена всякая хозяйственная деятельность, хотя там и живут люди (по большей части — неофициально).

Из-за своей близости к столице Украины и ряду особенностей зона отчуждения привлекает к себе внимание инвесторов и промышленников. В апреле этого года уже сообщалось о том, что наиболее зараженную 10-километровую зону вокруг ЧАЭС планируют превратить в свалку радиоактивных отходов. Глава Государственного агентства Украины по управлению Зоной отчуждения Чернобыльской АЭС Виталий Петрук сказал тогда следующее: «Люди не могут жить на загрязненной земле еще 500 лет, поэтому мы планируем сделать ее промышленным комплексом». К счастью, есть и более интересные варианты эксплуатации простаивающих земель. Один из них — постройка в зоне отчуждения солнечной электростанции.
Читать дальше →
Всего голосов 30: ↑29 и ↓1+28
Комментарии48

Сравнение конфигураций Dependency Injection фреймворков

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

Много раз я спрашивал себя, что какой IoC контейнер подойдет для того или иного проекта. Их производительность — это только одна сторона медали. Полное сравнение производительности можно найти здесь. Другая сторона медали — простота и скорость обучения. Так что я решил сравнить несколько контейнеров с этой точки зрения и взял Autofac, Simple Injector, StructureMap, Ninject, Unity, Castle Windsor. На мой взгляд, это наиболее популярные IoC контейнеры. Вы можете найти некоторые из них в списке 20 лучших пакетов NuGet и также я добавил другие по своим предпочтениям. Лично мне очень нравится Autofac и во время работы над этой статьей я еще больше утвердился, что это лучший выбор в большинстве случаев.


Здесь описываются основы IoC контейнеров, таких как конфигурация и регистрации компонентов. Есть мысль так же провести сравнение управления lifetime scope и продвинутых фитч. Примеры кода можно найти в репозитории LifetimeScopesExamples GitHub.

Читать дальше →
Всего голосов 23: ↑20 и ↓3+17
Комментарии15

Повышаем эффективность работы в Xamarin.Forms

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


Друзья! Очередная статья на тему разработки мобильных приложений на Xamarin. Мы не прекращаем рассматривать особенности использования Xamarin.Forms при разработке бизнес-приложений для iOS и Android. Все статьи из колонки можно найти и прочитать по ссылке #xamarincolumn
В прошлой статье мы рассмотрели, как можно повысить продуктивность при разработке мобильных приложений с использованием Xamarin, а также отметили базовые механизмы повышения производительности бизнес-приложений на базе Xamarin.Forms.

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

Что такое бизнес-приложения?


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


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

Готовим Xamarin.Forms: настройка окружения и первые шаги

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


Друзья! Мы продолжаем колонку на тему разработки мобильных приложений на Xamarin. И
после небольшого перерыва готовы вернуться к рассмотрению особенностей использования Xamarin.Forms при разработке бизнес-приложений для iOS и Android. Все статьи из колонки можно будет найти и прочитать по ссылке #xamarincolumn

В сегодняшней статье мы рассмотрим вопросы производительности приложений и оптимизации самого процесса разработки.

Правильные пчелы


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

Начнем мы с компьютеров, на которых будет идти разработка.
Читать дальше →
Всего голосов 22: ↑21 и ↓1+20
Комментарии8

Все уроки по ардуино

Время на прочтение5 мин
Количество просмотров285K
Однажды появилась необходимость собрать все уроки, обучающие материалы (tutorials) с habrahabr и geektimes в одном месте и немного их систематизировать. В этом сборнике обучаек представлены более 100 статей на тему ардуино с пометкой «tutorial», либо содержащие несложные для новичков проекты на ардуино, а также немного видеоуроков по смежным темам. Статьи разделены на 10 тематик по сферам применения собранных устройств. Также хочется напомнить, что весь обучающий материал, опубликованный на habrahabr и geektimes является интерактивным: в любой момент можно задать вопрос автору в комментариях к статье. Как правило авторы на них отвечают. Этот сборник будет дополняться новыми обучайками (tutorials) по мере их публикации.

Читать дальше →
Всего голосов 39: ↑36 и ↓3+33
Комментарии25

Установка Android планшета NEXUS 7 2013 вместо магнитолы в Mazda MX-5 – часть 1/2

Время на прочтение7 мин
Количество просмотров77K
Привет читающим! Этой статьей я постараюсь описать весь путь установки планшета на андроиде в качестве магнитолы в автомобиль mazda мх5. Начиная от закупки комплектующих и заканчивая программной частью – в общем полный полный набор с кучей фото, видео и текста. Я проделал эту работу и постарался описать всё так, что бы это мог повторить каждый!

И вы сможете завтракать в пробках с ютубом



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

Рекомендации по написанию кода на C# от Aviva Solutions

Время на прочтение40 мин
Количество просмотров81K
Представляю вашему вниманию перевод документа "Coding Guidelines for C# 3.0, 4.0 and 5.0".

Целью создания этого списка правил является попытка установить стандарты написания кода на C#, которые были бы удобными и практичными одновременно. Само собой, мы практикуем то, что создали. Эти правила являются одним из тех стандартов, которые лежат в основе нашей ежедневной работы в AvivaSolutions. Не все эти правила имеют четкое обоснование. Некоторые из них просто приняты у нас в качестве стандартов.

Статический анализатор кода VisualStudio (который также известен как FxComp) и StyleCop могут автоматически применять многие из правил кодирования и оформления путем анализа скомпилированных сборок. Вы можете сконфигурировать их таким образом, чтобы анализ производился во время компиляции или был неотъемлемой частью непрерывной или ежедневной сборки. Этот документ просто добавляет дополнительные правила и рекомендации, но его вспомогательный сайт www.csharpcodingguidelines.com предоставляет список правил анализа кода, необходимых в зависимости от того, с какой базой кода вы работаете.
Читать дальше →
Всего голосов 21: ↑17 и ↓4+13
Комментарии36

Информация

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