Как стать автором
Обновить
-1
0

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

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

Введение в ReactiveUI: коллекции

Время на прочтение11 мин
Количество просмотров20K
Привет, Хабр!

Часть 1: Введение в ReactiveUI: прокачиваем свойства во ViewModel

В предыдущей статье мы поговорили про свойства во ViewModel, и что мы можем с ними сделать, используя ReactiveUI. У нас получилось привести в порядок зависимости между свойствами и собрать в одном месте вьюмодели информацию о том, какие в ней есть зависимости между свойствами.
В этот раз еще немного поговорим о свойствах, а затем перейдем к коллекциям. Попробуем понять, какие проблемы есть с обычными коллекциями, и зачем было создавать новые, с уведомлениями об изменениях. И, конечно, попробуем их использовать.
Приступим
Всего голосов 10: ↑10 и ↓0+10
Комментарии2

Введение в ReactiveUI: прокачиваем свойства во ViewModel

Время на прочтение8 мин
Количество просмотров51K
В своих C# проектах при реализации GUI я часто использую фреймворк ReactiveUI.

ReactiveUI — полноценный MVVM-фреймворк: bindings, routing, message bus, commands и прочие слова, которые есть в описании почти любого MVVM-фреймворка, есть и тут. Применяться он может практически везде, где есть .NET: WPF, Windows Forms, UWP, Windows Phone 8, Windows Store, Xamarin.

Конечно, если у вас уже есть опыт работы с ним, то что-то новое для себя вы здесь вряд ли найдете. В этой статье мы познакомимся с его базовыми возможностями, касающимися работы со свойствами во ViewModel, а в будущем, надеюсь, доберемся и до других, более интересных и сложных фич.
Поехали?
Всего голосов 12: ↑12 и ↓0+12
Комментарии15

Очень быстрый и эффективный способ расслабления глаз

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

Предисловие


imageНе знаю, все ли программисты всесторонне любознательные люди, но я всегда пытаюсь получить фундаментальные знания во всех областях, которые могут быть практически полезны. В то время, когда мне в голову пришла эта идея я изучал анатомию и физиологию по журналам «Тело человека. Снаружи и внутри», ну а по работе я занимался стерео-варио фотографиями (для тех кто не знает — были такие советские календарики с ребристой поверхностью, где картинка либо казалась объемной, либо менялась). Так вот, в один из вечеров мне пришла в голову замечательная идея, которую я на протяжении уже 4х лет использую для поддержания своего зрения.
Обещаю, что эффект почувствуете сразу!
Читать дальше →
Всего голосов 246: ↑238 и ↓8+230
Комментарии207

Ежедневная работа с Git

Время на прочтение40 мин
Количество просмотров884K
Я совсем не долго изучаю и использую git практически везде, где только можно. Однако, за это время я успел многому научиться и хочу поделиться своим опытом с сообществом.

Я постараюсь донести основные идеи, показать как эта VCS помогает разрабатывать проект. Надеюсь, что после прочтения вы сможете ответить на вопросы:
  • можно ли git «подстроить» под тот процесс разработки, который мне нужен?
  • будет ли менеджер и заказчик удовлетворён этим процессом?
  • будет ли легко работать разработчикам?
  • смогут ли новички быстро включиться в процесс?
  • можно ли процесс относительно легко и быстро изменить?


Конечно, я попытаюсь рассказать обо всём по-порядку, начиная с основ. Поэтому, эта статья будет крайне полезна тем, кто только начинает или хочет разобраться с git. Более опытные читатели, возможно, найдут для себя что-то новое, укажут на ошибки или поделятся советом.

Далее очень много букв случайным образом превратились в пост.
Всего голосов 200: ↑194 и ↓6+188
Комментарии44

Откуда «мыло» в WPF и как с ним бороться

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


Это руководство для WPF-разработчиков, стремящихся добиться максимально чёткой картинки в своих приложениях. Графическая система WPF до мозга костей векторная, но конечным результатом её работы по-прежнему является растр. Если не уделить этому факту должного внимания, можно столкнуться с различными сортами «мыла» — паразитными артефактами растеризации. В такой ситуации важно не терять присутствия духа, причины их возникновения вполне рациональны, а методы борьбы достаточно просты и эффективны.
Читать дальше →
Всего голосов 184: ↑175 и ↓9+166
Комментарии62

Трудный выбор грида для проектов на WPF

Время на прочтение21 мин
Количество просмотров62K
Перед нашей командой встала задача выбора для будущих проектов библиотеки WPF компонентов для быстрой разработки пользовательского интерфейса бизнес-приложений. Посылом к рассмотрению стало то, что стандартный грид (а это обычно большая часть функционала пользовательского интерфейса бизнес-приложения) не устраивает по многим параметрам. Много чего приходится допиливать напильником, изобретая очередной велосипед. Надоело! Мы решили сравнить гриды из каждой библиотеки и сделать обоснованный выбор.

Участники конкурса


Думаю, что список участников сравнения никого не удивит:

Кому интересно как это происходило, прошу под кат.
Много текста
Всего голосов 49: ↑41 и ↓8+33
Комментарии33

Text Template Transformation Toolkit (T4): генератор кода в Visual Studio

Время на прочтение8 мин
Количество просмотров29K
Приветствую, Хабр!

Сегодня мы поговорим о рутине. Время от времени каждому программисту приходится совершать много нудной, объемной и шаблонной работы, которую постоянно так и хочется автоматизировать, да руки не доходят. Вот об одном малоизвестном способе упростить себе жизнь с помощью кодогенерации я и хочу сегодня рассказать сообществу дотнетчиков. Способ известен как Text Template Transformation Toolkit или попросту T4.

А что это такое?
Всего голосов 44: ↑35 и ↓9+26
Комментарии23

Руководство по разработке модулей расширений на C# для Visual Studio 2005-2012 и Atmel Studio

Время на прочтение86 мин
Количество просмотров43K
Плагины для C#

Аннотация


Около года назад мы опубликовали в блоге цикл статей о разработке плагинов для Visual Studio на языке C#. Сейчас мы переработали эти материалы, добавили новые разделы и предлагаем вашему вниманию новый вариант руководства.
Читать дальше →
Всего голосов 55: ↑50 и ↓5+45
Комментарии6

Unit тесты на практике

Время на прочтение12 мин
Количество просмотров146K
В последнее время появилось и продолжает появляться достаточно много публикаций на тему разработки через тестирование. Тема достаточно интересная и стоит того, чтобы посвятить её исследованию какую-то часть своего времени. В нашей команде мы используем модульное тестирование уже на протяжении года. В этой статье я хочу рассказать о том, что получилось и какой опыт в итоге мы приобрели.

Сразу оговорюсь, что примеры приводятся применительно к языку C# и платформе .NET. Соответственно, в других языках/платформах подходы и реализации могут отличаться.

Итак…
Читать дальше →
Всего голосов 34: ↑31 и ↓3+28
Комментарии56

Доказательное планирование

Время на прочтение13 мин
Количество просмотров40K
Примечание переводчика: оригинальная статья была написана в 2007-м году, однако, на мой взгляд, полностью сохраняет актуальность и сегодня.

Разработчики программного обеспечения не любят составлять план работ. Обычно пытаются вовсе от него отказаться. «Закончу, когда закончу!», — говорят они, ожидая, что этот смелый и веселый поступок вызовет одобрение у босса, а о планировании будет успешно забыто.

Большая часть расписаний, с которыми вы встретитесь, будет представлять из себя бездушные отписки. Совершенно забытые, они хранятся в каком-нибудь общем каталоге. После выпуска продукта с опозданием на пару лет странный парень, в чьем офисе, говорят, видели картотеку, принесет на обсуждение причин провала старую распечатку, которую все засмеют. «Только гляньте! Мы запланировали две недели, на переписывание системы с нуля на Ruby!»
Читать дальше →
Всего голосов 59: ↑54 и ↓5+49
Комментарии26

Барьеры памяти и неблокирующая синхронизация в .NET

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

Введение


В этой статье я хочу рассказать об использовании некоторых конструкций, применяющихся для осуществления неблокирующей синхронизации. Речь пойдёт о ключевом слове volatile, функциях VolatileRead, VolatileWrite и MemoryBarrier. Мы рассмотрим, какие проблемы вынуждают нас воспользоваться этими языковыми конструкциями и варианты их решения. При обсуждении барьеров памяти вкратце рассмотрим модель памяти .NET.
Читать дальше →
Всего голосов 63: ↑62 и ↓1+61
Комментарии18

Создание пользовательских примитивов в САПР на MultiCAD .NET API

Время на прочтение6 мин
Количество просмотров12K
Одним из главных недостатков традиционного .NET API в .dwg совместимых САПР является невозможность создания пользовательских примитивов (Custom Entities) на .NET. Пользовательские примитивы создаются на С++, для их использования в .NET необходимо создать управляемые обёртки на C++/CLI.

Технология MultiCAD .NET позволяет создавать пользовательские примитивы, не выходя за рамки управляемого кода. Помимо отсутствия промежуточных объектов на C++, в MultiCAD .NET максимально используются стандартные для .NET механизмы, как следствие нет необходимости во многих привычных для САПР программистов операциях: не нужно вручную описывать сериализацию, свойства в инспектор можно вывести без создания COM объекта и т.п.

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

Sample TextInBox MultiCAD .NET Entity

Чертежи, содержащие наш тестовый примитив, могут быть открыты в любой .dwg совместимой САПР. Для изменения примитива необходимо загрузить сборку, содержащую код примитива, причём во все поддерживаемые САПР платформы загружается одна и та же сборка без перекомпиляции. Технология является родной для nanoCAD, для загрузки модуля в AutoCAD требуется модуль расширения (Object Enabler). Как это работает смотрите под катом.
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии7

UAC, давай дружить!

Время на прочтение6 мин
Количество просмотров93K
Технология UAC — не лишний компонент безопасности ОС Windows последних версий и пользователи приходят к этой мысли, борясь с malware и вирусами. Программистам, в свою очередь, стоит грамотно подходить к написанию приложений и принимать во внимание наличие такого «обстоятельства».

image

На хабре и вообще в сети много статей на тему «Как отключить UAC», «Как обойти UAC» и др. Но зачем отключать, функция ведь полезная? Зачем обходить, мы ведь не злоумышленники?

Нужно дружить!

Ниже я расскажу как это делать в Вашем приложении.
Читать дальше →
Всего голосов 91: ↑76 и ↓15+61
Комментарии235

Безопасная работа с исключениями в C#

Время на прочтение4 мин
Количество просмотров48K
Структурные исключения — один из ключевых механизмов обработки ошибочных (в том числе и собственно исключительных) ситуаций. Ниже перечислены некоторые рекомендации по программированию, повышающие общее качество кода при работе с исключениями на C# и шире — платформе .NET.

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

Отдельные поля. Создавайте отдельные поля в собственном классе для передачи существенной информации, вместо сериализации и десериализации данных в поле Message. Несмотря на то, что идея упаковки в Message сложных данных в виде строки типа JSON выглядит соблазнительно, это редко является удачной идеей, поскольку добавляет дополнительный расход ресурсов на кодирование, локализацию, декодирование.
Читать дальше →
Всего голосов 45: ↑41 и ↓4+37
Комментарии17

Создание документации в .NET

Время на прочтение12 мин
Количество просмотров56K
Open notebookКачественная документация – неотъемлемая часть успешного программного продукта. Создание полного и понятного описания всех функций и возможностей программы и программного компонента требует немало сил и терпения. В данной статье я рассмотрю некоторые практические аспекты создания документации для .NET компонентов.

Предположим, что у нас готова или почти готова некоторая .NET библиотека для разработчиков (они же конечные пользователи). API библиотеки безупречен, количество багов впечатляюще мало, да и вообще это не библиотека, а просто кладезь совершенного кода. Дело за малым – объяснить пользователям, как работать с этим замечательным продуктом.

Есть разные подходы к написанию документации. Некоторые команды предпочитают начинать создание документации в момент начала создания продукта. Другие откладывают написание мануалов на окончание работ. В некоторых командах документацию пишут специальные люди, которые ходят от разработчика к разработчику и от менеджера к менеджеру, аккумулируя знания о продукте. Во многих небольших командах таких специальных людей нет, а потому документацию часто пишет разработчик или разработчики. Кто-то использует сторонние средства вроде Help & Manual, в которых, как в заправском текстовом редакторе, можно создавать очень сложную верстку и на выходе получать документацию в многообразии форматов. Многие используют другой подход, широко пропагандируемый в последнее время – написание документации прямо в коде программы/библиотеки.

Читать дальше →
Всего голосов 95: ↑82 и ↓13+69
Комментарии29

Kickstarter + D = DConf 2013

Время на прочтение3 мин
Количество просмотров5.1K
На слуху множество разнообразных проектов, успешно получивших финансирование на Kickstarter. И если обычно они относятся к тематике Habrahabr лишь в том, что тут есть хаб Crowdfunding, то этот случай более примечателен — требуемая сумма была набрано проектом по финансированию конференции по языку программирования D.

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

Сервис для более эффективного пополнения запаса английских слов

Время на прочтение2 мин
Количество просмотров49K
Добрый день!

Я хочу представить небольшой сервис, который создан, чтобы помочь в эффективном пополнении словарного запаса для английского языка:

image

Если коротко, работает он следующим образом.

1. Вы загружаете текст, который хотите прочитать. Это может быть URL статьи из интернета, книга или статья в pdf, doc, txt, ps или субтитры.

2. Система строит статистику слов и отображает слова, отсортированные по частоте употребляемости в тексте. Предварительно к словам применяется лемматизация (т. е. слова make и made будут считаться идентичными).

3. Вы отмечаете знакомые слова, а также слова, которые надо изучить.

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

А теперь чуть подробнее
Всего голосов 86: ↑82 и ↓4+78
Комментарии72

Задачи и отмена в .Net — tips & tricks

Время на прочтение11 мин
Количество просмотров101K
С выходом .NET Framework 4.0 в состав BCL была добавлена библиотека Task Parallel Library (TPL), реализующая параллелизм на основе задач. В основе библиотеки лежат типы Task и унаследованный от него тип Task. Эти типы являются обёртками для асинхронных операций; они позволяют абстрагироваться от таких технических деталей, как, например, потоки и синхронизировать асинхронные операции друг с другом.

В этой же версии .NET Framework появился мини-framework для кооперативной отмены асинхронных операций. Состоит он из всего трёх типов:
  • CancellationTokenSource — создаёт маркёры отмены (свойство Token) и обрабатывает запросы на отмену операции (перегруженные методы Cancel/CancelAfter).
  • CancellationToken — маркёр отмены; позволяет несколькими способами отслеживать запросы на отмену операции: опросом свойства IsCancellationRequested, регистрацией callback-функции (через перегруженный метод Register), ожиданием на объекте синхронизации (свойство WaitHandle).
  • OperationCanceledException — исключение, выброс которого по соглашению означает, что запрос на отмену операции был обработан и операция должна считаться отменённой. Предпочтительный способ генерации исключения — вызов метода CancellationToken. ThrowIfCancellationRequested.

Механизм отмены через CancellationToken является стандартным для TPL — есть перегрузки методов, принимающих CancellationToken, исключения OperationCanceledException специальным образом обрабатываются и т.д. Однако, как и в любом другом API, есть свои тонкости, хитрости, best practices.
Читать дальше →
Всего голосов 39: ↑39 и ↓0+39
Комментарии5

Оптимизация Windows для использования SSD диска: мифы и реальность

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


Когда весь интернет пестрит холиварами на тему «SSD ненадежны» и «SSD настолько быстрые, что я больше никогда не буду работать с HDD», думаю самое время внести немного ясности в то море противоречевой информации о самих SSD и о настройке Windows для работы с ними.

Кто заинтересовался, прошу под кат.

Читать дальше →
Всего голосов 129: ↑81 и ↓48+33
Комментарии293

Готовые решения для английской локализации

Время на прочтение1 мин
Количество просмотров7.9K
«Делайте стартап с прицелом на глобальный рынок», — твердят корифеи венчурного инвестирования. Наряду с прочим, такому стартапу предстоит озаботиться качеством сообщений на английском языке, с помощью которых приложение или облачная услуга будет общаться с пользователями.

Неграмотная английская локализация способна обесценить и творческий подход к архитектуре, и изящество кода, которыми так славятся толковые отечественные программисты. Ведь для большинства пользователей качество софта и уровень исполнения его интерфейса – это одно и то же. Про приложение с опрятной панелью инструментов и понятными сообщениями говорят: «Эта программа хорошая» и прощают ей некоторые недостатки в буквальном смысле за красивые глаза.

Я работаю в команде создателей технической документации Parallels Plesk Panel. Этот материал появился как обобщение нашего опыта: мы учитывали ошибки своих коллег-разработчиков и параллельно читали учебники по техническим коммуникациям. В результате у нас появились свои правила и шаблоны – они помогут писать простые сообщения даже тем, у кого английский язык находится в стадии освоения. Наш материал не претендует на исчерпывающее руководство на все случаи жизни, но это та самая печка, от которой могут плясать начинающие локализаторы.

Под катом размещены кликабельные картинки, каждая из которых ведет на соответствующий PDF, пригодный к печати на А4.
Читать дальше →
Всего голосов 37: ↑33 и ↓4+29
Комментарии12

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность