Обновить
122.16

C# *

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

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

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

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

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

Время на прочтение11 мин
Охват и читатели22K

Введение


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

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

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

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

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

Время на прочтение6 мин
Охват и читатели5.6K

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 мин
Охват и читатели840
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.3K
Microsoft выпустили Silverlight 5. Поддержка будет производиться до 2021 года.



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

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

Время на прочтение3 мин
Охват и читатели7.8K
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 мин
Охват и читатели14K

Префикс


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

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

Фабула


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

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

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

Пишем свой сервис авто-обновлений

Время на прочтение7 мин
Охват и читатели23K
Большинство разработчиков stand-alone приложение рано или поздно сталкиваются с проблемой доставки обновлений для своего приложения. В этой статье я постараюсь решить эту проблему наилучшим, на мой взгляд, способом — написать свой собственный универсальный сервис авто-обновлений, который будет висеть в процессах в единственном экземпляре и доставлять обновления для всех подписавшихся приложений.

Существует несколько готовых решений для .NET, но самое актуальное — это ClickOnce. Эту технологию уже нельзя назвать новой, однако серьёзное развитие, на мой взгляд, она получила не так давно, и не обладает исчерпывающим функционалом.
Если вы не хотите изобретать велосипед, то советую вам пристально изучить возможности ClickOnce, и если вам будет достаточно предлагаемого функционала, то это определенно ваш выбор. Однако ClickOnce не панацея и далеко не всегда ею можно обойтись.

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

UPD: Суть реализации заключается в том, чтобы уменьшить количество процессов и служб, которые занимаются обновлением. Если у вас несколько приложений, то все они смогут «получать» обновления от одного единственного Windows-сервиса. Не надо будет для каждого приложения запускать лаунчер, держать соединение с сервером обновлений. Теоретически в системе всеми обновлениями может заниматься один процесс, и возможно этим процессом скоро станет ClickOnce, если разработчики перестанут делать свои «велосипеды». А разработчики перестанут делать свои велосипеды тогда, когда им будет достаточно функционала ClickOnce. Сейчас, к сожалению, это не всегда так.

Итак задача


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

Как использовать C++ AMP из C#

Время на прочтение5 мин
Охват и читатели13K

В Visual Studio 11 Developer Preview, C++ AMP позволяет ускорить Ваши приложения, используя гетерогенное железо, такое как GPU.
Если Вы являетесь .NET-разработчиком, то все равно сможете использовать C++ AMP в Ваших приложениях. Большинство кода будет писаться на C#, лишь некоторые участки с помощью C++ AMP для его выполнения на GPU, затем использоваться любимый interop-механизм для связывания. Данный пост объяснит, как это сделать через P/invoke.
Читать дальше →

Введение в Microsoft “Roslyn” CTP

Время на прочтение4 мин
Охват и читатели33K

Почему Roslyn?


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

Как пишет Soma в своём блоге, часть Visual Studio language team работает на проектом, который называется Roslyn. Его главная цель — переписать компиляторы C# и VB и создать языкове сервисы в управляемом коде. С чистым, современным и управляемым кодом наша команда сможет быть более продуктивной, внедрять инновации быстрее и выдавать больше возможностей скорее и с лучшим качеством.

Более того, мы открываем компиляторы C# и VB со всей их внутренней информацией, делая доступным для вас анализ кода. Мы предоставляем публичное API и обеспечиваем точки расширения в языковых сервисах C# и VB.

Это открывает новые возможности для расширений VisualStudio — написание мощных инструментов рефакторинга и утилит языкового анализа, а так же позволит любому использовать наши парсеры, семантические движки, генераторы кода и сценариев в своих проложениях.
Читать дальше →

Вышел Microsoft “Roslyn” CTP

Время на прочтение1 мин
Охват и читатели8.5K
Большинство компиляторов на текущий момент являются чёрными ящиками — они превращают исходный код в объектные файлы или сборки. Цель “Roslyn Project” от компании Microsoft — открыть компиляторы Visual Basic и C#, дав разработчикам возможность пользоваться API, предоставляющим SyntaxTree, Emit API, Symbol API, Binding & Flow Analysis API. Над API надстраивается множество полезных сервисов:


Roslyn можно использовать для генерации кода, анализа и оптимизации, а так же поддержки сценариев и интерактивного использования VB и C#. На днях вышел Microsoft “Roslyn” October 2011 CTP, который уже можно скачать и попробовать на деле. Под катом подборка ссылочек по теме.
Читать дальше →

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

Событийно-ориентированный HTTP-сервер на C# с помощью Rx и HttpListener

Время на прочтение4 мин
Охват и читатели27K
Достаточно большое название? Да? В этом посте я покажу Вам альтернативный подход в создании простого событийно-ориентированного HTTP-сервера на C#, используя мощь Reactive Extensions.
Читать дальше →

Roslyn Project — compiler as a service

Время на прочтение1 мин
Охват и читатели3.8K
Не так давно в рамках конференции Build был доклад «Future directions for C# and Visual Basic» от Anders Hejlsberg, в котором анонсировался Roslyn Project. Сейчас об этой разработке известно не так много, но я постараюсь осветить наиболее интересные моменты, имеющиеся на данный момент.

В настоящее время компиляторы C# и Visual Basic представляют из себя чёрный ящик — они берут исходный высокоуровневый код и выдают нам готовый IL-код. Roslyn Project представляет из себя compiler as a service, т.е. компилятор, предоставляющий разработчику API, позволяющее добираться до его внутренних данных. Теперь можно анализировать код и принимать участие в компиляции — проводить модификацию исходного кода, создавать дополнительную функциональность для C# и VB.
Читать дальше →

XNA Draw или пишем систему частиц. Часть II: шейдеры

Время на прочтение6 мин
Охват и читатели18K
Привет всем разработчикам игр и просто людям, которые интересуются геймдевом.

Пришло время рассказать вам о пиксельных шейдерах и о том, как сделать post-proccesing. Это вторая часть статьи о графических методах в XNA, в прошлой статье — мы рассматривали методы Draw и Begin у spriteBatch. Для примера: улучшим нашу систему частиц добавлением пиксельного шейдера, который будет искажать пространство.
Читать дальше →

XNA Draw или пишем систему частиц. Часть I

Время на прочтение6 мин
Охват и читатели30K
И опять, привет хабравчанам!

Буквально несколько дней назад — начал цикл статей, о том, как можно создавать крутые игры с помощью XNA Framework, своей студии у меня нет, поэтому ограничимся только 2D играми.

На этот раз — мы более подробно рассмотрим Draw и напишем свою первую систему частиц.
Читать дальше →

Относительно позиционированные элементы в документах WPF

Время на прочтение3 мин
Охват и читатели4.2K
Пару месяцев назад мне пришлось реализовывать интерфейс с помощью WPF. В основном использовался FlowDocument, т.к. необходимо было максимально близко организовать UI в стиле веб-страниц.
Привыкший к свободе по позиционированию HTML-элементов с помощью CSS, я не мог найти решение по относительному позиционированию вложенных элементов. Свойства Top, Left, Right, Bottom полностью отсутствуют в плавающих WPF документах. MSDN выдал только класс Figure. Однако HorizontalOffset и VerticalOffset не работают при использовании FlowDocumentScrollViewer. Поиск в гугле также не помог.
Однако решение оказалось более чем простым.
Читать дальше →

Дополнение к локализации ASP.NET MVC – Используем маршрутизацию

Время на прочтение4 мин
Охват и читатели2.8K
Дополнение к прошлому посту от Alex Adamyan, посвященный локализации в ASP.NET MVC приложениях. Хотя это материал относится к ASP.NET MVC 2, его можно смело использовать и в версии 3.

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

Также этот метод локализации не потребует трюк с OutputCache, как было описано в предыдущем посте.

Цель этого поста – возможность показать, как получить из URL-адреса вида /{culture}/{Controller}/{Action}... в Вашем приложении, URL-адрес вида /ru/Home/About.
Читать дальше →

Знакомство с XNA и написание первой музыкальной игры

Время на прочтение13 мин
Охват и читатели52K
Привет всем начинающим геймдевелоперам и просто хорошим людям. Сегодня, я хочу познакомить вас с замечательным фреймворком XNA (набор инструментов с управляемой средой времени выполнения dotNet). Программировать мы будем на C#.
Для того, чтобы познакомить вас с XNA ближе, я предлагаю написать простую «музыкальную» 2D игрушку. Остальное под катом.
Читать дальше →

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