Как стать автором
Поиск
Написать публикацию
Обновить
108.62

C# *

Объектно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Полуавтоматическая конвертация лени в код

Время на прочтение7 мин
Количество просмотров6.6K
Всем доброго дня. Сегодня я хочу поговорить об автоматической генерации кода C#. Например, свойства в классах, описывающих сущности предметной области, обычно описываются по совершенно одинаковой схеме. И мне элементарно лениво писать для каждого примитивного свойства одинаковые конструкции. Немного спасает применение сниппетов и активных шаблонов, но когда приходит нужда что-то поменять в этой схеме, то приходится перелопачивать кучу кода. Так почему бы это однообразие не генерировать автоматически в процессе сборки?
В какой-то момент кинетическая энергия творчества ненадолго пересилила потенциальную энергию лени, и результатом этого стала маленькая библиотечка для автоматической генерации некоторых исходных файлов программы на основе внешних данных. Приглашаю под кат всех ленивых (в хорошем смысле этого слова) разработчиков на C#.
Читать дальше →

Сказ о том, как я себе рабочий процесс упростил. Или написание своего шпиона на C#

Время на прочтение5 мин
Количество просмотров5K
В этой статье я хочу рассказать вам об эксперименте, который я поставил на себе.

Уже давно работаю удалённо (outsourcing) и как следствие обязан ежемесячно предоставлять отчёт о проделанной работе, в виде таблицы с наименованием задач, затраченным временем и прочей информацией. Даже при огромном наличии тикет систем, использовать их ежедневно для записи проделанной работы — каторга. В фирме где я работаю нет строгих требований к ведению логов или других ежедневных отчётов, что возможно делает мою проблему отсутствия ежедневных данных единичной, или по крайней мере не такой популярной (или же нет, быть может я не один такой аутсорсер?). Месяц пролетает незаметно и с полным погружением в работу, вместо погружения в бюрократию, поскольку всё строится на доверии. И до недавнего времени я с задачей составления ежемесячных отчётов справлялся, поскольку почти каждый день я как минимум здоровался с коллегами по skype, болтал о том о сём, включая рабочий процесс, обновлял тикеты, получал письма. Но вот же беда, не всегда имеются в наличии сохранившиеся данные на нужный день, в который хоть убейся не можешь вспомнить что делал. И в один такой момент, составляя такой отчёт, меня вдруг осенило, как я, программист, могу сам себе впредь эту проблему решить.
Читать дальше →

Dependency injection в MVC 3 Framework на примере Autofac

Время на прочтение4 мин
Количество просмотров15K
В настоящее время трудно представить себе приложение на MVC3Framework без использования Dependency injection. Это статья рассчитана на тех кто знает, что такое DI, но никогда не использовал Autofac для этого.
Так же отмечу что более подробно об Autofac вы сможете прочитать тут

Для начала мы должны скачать и включить библиотеки Autofac в проект. Для этого я использую NuGet. Введите в консоли:
PM> Install-Package Autofac Устанавливаем сам Autofac
PM> Install-Package Autofac.Mvc3 И дополнения к Mvc3

Так же вы можете воспользоваться визуальным редактором NuGet, или просто скачать и подключить эти сборки.
Ниже написан код для инициализации Autofac, я постарался включить сюда основные варианты инициализации.
Читать дальше →

Менеджмент памяти в .Net Framework от Redgate

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

Недавно с рассылкой от компании Redgate (это та компания, которая выпустила всем известные тулы .Net Reflector, SmartAssembly и прочие) получил бесплатную книгу «Under the Hood of .NET Memory Management». Пока что доступна только первая ее часть, но она довольно объемная и раскрывает многие аспекты менеджмента памяти. Самое вкусное обещают во второй части. Приятного скачивания (краткое содержание под катом):



Бонусом по первой ссылке, в том же архиве, идет книга по ANTS Memory Profiler

Читать дальше →

WPF Navigation: Используем связку Page + Frame

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

Windows Presentation Foundation имеет много вариантов создания многооконного приложения. Среди них выделяются два типа: стандартный привычный Window и «браузерный» Page. Ничего особенно интересного для меня в Window не было, поэтому решил попробовать браузерный вариант в десктопном приложении. Звучит несколько странно и, возможно, абсурдно, но менее интересно от этого не становится. В данном топике будут описаны основные этапы создания данной навигации.
Читать дальше →

Сжатие пакетов и защита С# клиента с открытым исходным кодом

Время на прочтение2 мин
Количество просмотров2.7K
Привет, сообщество.

Мой путь в программировании: ASP VB script >> VB.Net >> C#, с С и С++ я знаком минимально.
С давних пор пишу онлайн RPG (около 9 лет) и сейчас дошел до стадии публичного онлайн тестирования.

Клиентская часть написана на С# и доступна для изучения(улучшения) всеми желающими.
У меня нет никакой паранойи (надеюсь ;-)) относительно хакеров и любителей поломать чужие сервера — я отлично понимаю, что никому нет дела до моих исходников, однако мне хочется, чтобы на сервер отсылались пакеты, обработанные только известной, проверенной и утверждённой версией клиента.
Поэтому я хочу реализовать защиту в виде подключаемой приватной нативной библиотеки, которая будет отсылать на сервер хеш код используемого клиента, плюс она-же будет шифровать/дешифровать/сжимать/разжимать все пакеты. То есть если в клиенте реализуют отсылку фиктивного хешь кода, без использования нативной DLL, то злоумышленнику также придется реализовать свою версию обработки пакетов.
Читать дальше →

C# 5 — об async/await с начала

Время на прочтение5 мин
Количество просмотров257K
В недавно вышедшей Visual Studio 11 Beta встроена новая и главная фишка будущего C# 5 — асинхронное программирование с помощью async/await. Про нее уже написано достаточно много статей в том, числе на хабре — например, эта серия статей. Однако, я для себя так и не понял в чем суть нового синтаксиса, пока сам не попробовал его в деле. Данная статья — попытка самому структурировать и до конца разобраться с этим достаточно интересным инструментом и поделиться результатами с сообществом, рассказав про него немного иначе. Итак, поехали…
Читать дальше →

Реализация Code Action с помощью Roslyn

Время на прочтение8 мин
Количество просмотров2.7K
Roslyn Services API позволяют легко реализовывать расширения, которые находят и устраняют проблемы в коде прямо в Visual Studio. Roslyn Services API доступно как часть Roslyn CTP.

В этом посте мы реализуем расширение для Visual Studio, которое детектирует вызовы метода Count() у Enumerable, после чего результат проверяется на равенство больше нуля, например, someSequence.Count() > 0. Проблема, заключающаяся в коде, в том, что Count() должен пройтись по всей последовательности, прежде чем вернуть результат. Более правильным подходом в данном случае является вызов метода Enumerable.Any().

Чтобы исправить это, мы реализуем CodeIssueProvider, детектирующий проблему, и CodeAction, который заменяет условие на вызов Enumerable.Any(), как и требуется. Т.е. наш CodeAction изменит что-то типа someSequence.Count() > 0 на someSequence.Any().
Читать дальше →

Windows Phone 7 XNA: гнем пиксели или нет шейдерам

Время на прочтение8 мин
Количество просмотров4.4K
Привет дорогой друг.

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



Читать дальше →

Разрабатываем компилятор для учебного языка Cool на языке C# под .NET (Часть 2 + Бонусы)

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

Введение


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

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

Читать дальше →

Жизненный цикл Request в MVC 3 Framework приложении

Время на прочтение7 мин
Количество просмотров8.6K
Любой разработчик знает, что URL в маршрутизации MVC играет ключевую роль. Как известно, существует стандартная маршрутизация:

routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional );


Она представляет собой правило по которым выбираются маршруты. В простейших случаях, можно поменять местами action и controller, или добавить еще множество параметров, которые будут выглядеть в url следующим образом- param1/param2/param3/. Иногда, например в CMS системах, необходимо сделать так, чтоб часть url приходила как переменная.

routes.MapRoute(
                "Default",
                "{controller}/{action}/{*url}",
               new { controller = "Content", action = "Home", url = UrlParameter.Optional
});


Это правило выделяет Action и Controller, а остальную часть присваивает переменной url.
Регистрируются Routes при старте приложения. А именно в файле Global.asax в методе Application_Start().

Для создания большинства приложений этих знаний хватает. Цель же моей статьи пройти весь жизненный цикл Request и посмотреть, что же происходит, перед тем как приложение разберет url и передаст управление нужному action.

Читать дальше →

Размеры CLR-объектов. Точное определение

Время на прочтение5 мин
Количество просмотров30K
Думаю, многим разработчикам на управляемом коде всегда интересовало: сколько же байт занимает экземпляр объекта? А каков лимит размера одного объекта в CLR? Существуют ли различия в выделении памяти между 32-битными и 64-битными системами? Если данные вопросы для Вас не пустой звук, тогда прошу под кат.
Читать дальше →

Разрабатываем компилятор для учебного языка Cool на языке C# под .NET (Часть 1)

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

Введение


Здравствуй, уважаемый хабраюзер.Я хотел бы тебе представить материал о практическом создании компилятора, который будет транслировать код, написанный на языке Cool, в код виртуальной машины CIL (Common Intermediate Language) под платформу .NET.Данный материал я решил разбить на две части из-за лени все сразу это описывать

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

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

Читать дальше →

Ближайшие события

Использование SCM для управления драйверами в C# реализованной с помощью dll на C++/cli

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

Service Control Manager (SCM)


SCM — это сервер, реализованный в Windows, для удаленного управления сервисами (вызовом процедур).

Для того, чтобы запустить драйвер в Windows, ему в соответствие ставится сервис, который обеспечивает управление этим драйвером. Не путать с устройством, которое создает драйвер в системе, через которое происходит обмен сообщениями с драйвером. Это устройство создается уже после старта драйвера, а вот SCM обеспечивает само внесение драйвера в систему. С помощью SCM можно: добавлять, удалять, запускать или останавливать службы.

Постановка задачи


Написать буферный класс позволяющий упростить работу SCM в C#.
Сам внешний вид этого класса можно обознать очень просто:

public ref class ServiceControlManager : public IDisposable
{
public:
	ServiceControlManager(void);
	void AddDriver(String^ ServiceName, String^ BinaryPathName);
	void DeleteDriver(String^ ServiceName);
	void StartDriver(String^ ServiceName);
	void StopDriver(String^ ServiceName);
protected:
	~ServiceControlManager();
	!ServiceControlManager();
private:
	SC_HANDLE SCMHandle;
};

Конструктор, деструктор, финализатор, основные методы, из атрибутов только HANDLE объекта SCM. Из этого следует, что экземпляр объекта этого класса будет содержать в себе созданный объект SCM, а методы упрощают с ним работу. Класс является буферным, и поскольку он реализован в C++/cli он будет автоматически масштабируем для работы в среде .NET, соответственно и в C#.
Читать дальше →

Вышел ReSharper 6.1

Время на прочтение1 мин
Количество просмотров799
JetBrains выпустили ReSharper 6.1. В новой версии исправлены многие проблемы производительности, добавлена поддержка Async CTP (список нововведений), обновлён движок настроек (список нововведений), добавлена экспериментальная поддержка Visual Studio 11 Developer Preview. Скачать новую версию можно с официального сайта

XNA Draw: пишем отложенное освещение на три источника с помощью шейдера

Время на прочтение7 мин
Количество просмотров19K
Привет хабравчанам!

Давненько я не писал на хабр: учеба, сессия надвигается, сами понимаете. Сегодня я попробую рассказать, как в XNA реализовать Deferred Lighting (отложенное освещение) с использованием normal mapping на три источника света, при этом использовать мы будем Reach-профиль и Shader model 2.0.
Напомню, раньше мы уже затрагивали тему шейдеров: тут. Остальное под катом, видео и демо там же.
Читать дальше →

Silverlight 5 Released!

Время на прочтение1 мин
Количество просмотров5.1K
Microsoft выпустили Silverlight 5. Поддержка будет производиться до 2021 года.



Установочный файл Silverlight 5 весит меньше 7МБ и устанавливается за 10 секунд. В него добавили много вкусного и полезного.
Читать дальше →

Hosts Commander — консольный редактор hosts для Windows и Linux

Время на прочтение3 мин
Количество просмотров7.6K
Hosts Commander призван максимально облегчить работу с файлом hosts из консоли. Если вам время от времени приходится забираться в этот файл (что характерно для веб-разработчика), и вы любите консоль — Hosts Commander может прийтись вам по душе.
Год назад на Хабрахабре была анонсирована первая версия программы, которая работала только под Windows. Но с тех пор многое изменилось и стало лучше. Это отличный пример, как из простой идеи может вырасти нечто большее.
Читать дальше →

Coin Keeper. iPhone приложение на C#

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

Вчера разработанное нами приложение Coin Keeper заняло третье место в топе платных приложений русского AppStore.

Интересно то, что мы разрабатывали его не на привычном Objective C, а на C#, используя фреймворки Monotouch и Monodroid.

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

технические подробности проекта...

Универсальный NMEA 0183 Parser/Formatter на C# (+ порт на JAVA)

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

Префикс


Как бы банально это не звучало, но поискав готовое решение, которое могло бы (по моему разумению) полностью поддерживать работу с NMEA — сообщениями, я его не обнаружил.

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

Фабула


Да простят меня люди сведущие, но для прочей ясности я все же кратко опишу физику явления.
Итак, сообщение стандарта NMEA, в самом стандарте называются «sentence», тот, кто эти «предложения» «говорит» — «Talker». Так например, GPS-применик в рамках NMEA имеет идентификатор «GP», а наш ответ чемберлену — «GL».

Существующие решения работали либо только с этими двумя типами устройств, а в лучшем случае понимали различные специфические для конкретных производителей (Germin, UBLox, и пр.) приемников команды.
Да и кто знает, вдруг срочно нужно будет интерпритировать данные поступающие с атомных часов (Talker: ZA), или спозиционироваться по системе Loran-C (Talker: LC), ну а возможность поболтать с автопилотом (Talker: AG) вообще нельзя исключать!

Читать дальше →

Вклад авторов