Обновить
105.33

C# *

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

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

Анонсирован Xamarin 3

Время на прочтение3 мин
Охват и читатели22K
Анонсирован Xamarin 3 — кросс-платформенная среда разработки на C# для большинства мобильных платформ. Основные нововведения: дизайнер интерфейса для iOS Xamarin Designer, кросс-платформенная библиотека для построения пользовательского интерфейса Xamarin.Forms, улучшения IDE, новые методики повторного использования кода.

1. Xamarin Designer для iOS — визуальный дизайнер для iOS, работающий и в Xamarin Studio и Visual Studio. Поддерживается полная совместимость с форматом Storyboard, так что Visual Studio и Xamarin Studio могут использоваться совместно с Xcode Interface Builder. Нестандартные элементы управления прорисовываются прямо в дизайнере. Подробнее о Xamarin Designer.


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

Как тестировать не-публичные методы в .NET

Время на прочтение3 мин
Охват и читатели33K
image Любишь покрывать код тестами? Тебе нравится приятное теплое чувство защищенности, которое возникает при прохождении тестов?

Молодец!

Настоящие профессионалы не полагаются на случай, они стелют соломку заранее держат все под контролем.

Хочешь чтобы внутри, за публичным интерфейсом, тоже все было покрыто тестами?

Пойдем, я расскажу, как это сделать

Как подружить Android, Visual Studio и Parallels Desktop

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

Введение


Несколько месяцев назад, прочитав на Хабре статьи про кросплатформенную разработку с помощью Mono и Xamarin, вдохновился написанием собственных приложений на платформы Android, iOS и Windows Phone. Через некоторое время, найдя работу в компании, которая как раз и занимается разработкой приложений с помощью Xamarin, стал гордым обладателем iMac и понял, что хорошо бы кроме девайса с Android’ом на борту (да, у меня прекрасно уживается продукция Apple и Google, хотя предпочтение я отдаю первым) иметь на iMac эмулятор Android (так как держать весь зоопарк устройств для своих проектов не представляется возможным).
Читать дальше →

Интеграция средств VR в Unity3d

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

Проходит время и все меняется, в том числе и игры, точнее подход к их созданию. Сейчас появились новомодные штучки типа шлемов виртуальной реальности Oculus Rift, Sony Morpheus, разнообразных контроллеров движения типа Razer Hydra, Sixense STEM и многими другими средствами которые помогают погрузиться с головой в виртуальную реальность. В этой статье будет наглядно разобрана интеграция Oculus Rift и Razer Hydra в Unity3d.
Если вам интересно прошу под кат

CLRium. Как создать любую конференцию + плюшки для предстоящей Питерской встречи

Время на прочтение7 мин
Охват и читатели4.7K
Сегодня на улицах Питера славная солнечная погода сменилась хмурым небом. Чем не повод посидеть в Интернете? В этой статье я хотел бы напомнить дорогим читателям что во-первых 19-го июня пройдет встреча .Net разработчиков Питера, на которую мы приглашаем как начинающих, так и профессионалов своего дела. В отличии от других мероприятий по .Net здесь не будет разговоров в стиле Капитана Очевидность, что вышла новая версия фреймворка такого-то. Большинство тем конференций, если постараться, можно найти в Интернете. Не платя много денег за прослушивание уже выложенных тех же самых докладов с прошлых конференций. Эта встреча раскроет исключительно свежие и общие для всех разработчиков знания: как все работает. Что такое поток и как им манипулировать. Что такое домен и как сделать IoC с динамически отгружаемыми типами. Как сделать ветвление потока на два? Причем чтобы второй поток начинал работу с точки ветвления первого? Что нам дает декомпиляция и какими средствами можно заменить PostSharp? Даже если нет особого интереса, просто советую прочитать список тем семинара

И, перед тем как рассказать, как же все-таки организовывалась Московская встреча, объявляю акцию для Санкт-Петербурга, которая действует с сегодняшнего дня:
  • Первые два человека, оплатившие участие, получат по кружке в форме объектива фотоаппарата
  • Не зависимо от даты оплаты каждый десятый, оплативший участие, получает возврат средств. Т.е. идет на мероприятие совершенно бесплатно!
  • Каждый оплативший из диапазона (5, 25, 45,… по счету) в период до 18-го числа включительно имеют право заказать у меня любые книги стоимостью до 1500 рублей (что в полтора раза дороже билета) и они будут торжественно вручены на семинаре (мне необходимо будет скинуть ссылку на интернет-магазин ozon.ru).

А проходить все будет тут ( страница с подробностями, страница с регистрацией, +7 (921) 948-16-08):


Итак, как же организовывалась Московская встреча? Об этом под катом
Читать дальше →

String.Intern делает строки ещё интереснее

Время на прочтение10 мин
Охват и читатели78K
Предисловие от переводчика:

Проходя/проводя собеседования, приходится сталкиваться с вопросами, которые раскрывают общее понимание работы .NET. По моему мнению, наибольшей любовью среди таких вопросов пользуются вопросы о работе “сборщика мусора”, но однажды мне был задан вопрос о интернировании строк. И он, честно говоря, поставил меня в тупик. Поиск в рунете выдал несколько статей, но они не давали ответы на те вопросы, которые я искал. Надеюсь мой перевод статьи Эндрю Стеллмана (автора книги “Head First C#”) заполнит этот пробел. Думаю, этот материал будет полезен для начинающих .NET разработчиков и тем кому стало интересно, что же такое интернирование строк в .NET.

String.Intern делает строки ещё интереснее


Одна из первых вещей, с которой сталкивается каждый начинающий C# разработчик — это работа со строками. Я показываю основу работы со строками в начале «Head First C#», как поступают практически в любой другой книге по C#. Так что не следует удивляться, что C# разработчики уровня джуниор и мидл уровня чувствуют, что они получили довольно хорошую базу по строкам. Но строки интереснее, чем кажутся. Одним из самых интересных аспектов строк в C# и .NET является метод String.Intern. Понимание работы этого метода может улучшить ваши навыки в C# разработке. В этом посте, я сделаю краткий туториал для метода String.Intern, чтобы показать вам как он работает.

Примечание: В конце этого поста я собираюсь показать кое-что «под капотом», используя ILDasm. Если вы никогда не работали с ILDasm раньше, это будет хорошей возможностью что-бы познакомиться с очень полезным инструментом .NET.
Читать дальше →

Пишем интерпретатор скрипта и стековую машину

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

В этой статье речь пойдет о довольно необычном проекте. Однажды меня посетило желание написать свой интерпретатор какого-нибудь скриптового языка и исполняющую машину для него. Просто для того, чтобы посмотреть, как оно внутри работает. Такая цель звучит не очень благородно и я отложил затею в долгий ящик, т.к. мне хотелось более полезной формулировки.
Как-то раз, один мой знакомый посетовал, что нужно написать скрипт автоматизации на WSH, но ни VBScript, ни Javascript он не знает. Тут «благородная» формулировка возникла сама собой… нужно помочь товарищу. В результате был написан компилятор и исполняющая машина, позволяющая исполнять скрипты для Windows Script Host, не прибегая к VBScript и JS. Под катом — краткая предыстория проекта и его внутреннее устройство и сам язык программирования.
Читать дальше →

CLRium: мини-конференция по нутрям .Net в Санкт-Петербурге

Время на прочтение2 мин
Охват и читатели6.6K
Буквально на прошлой неделе была проведена мини-конференция по внутренностям CLR и как ими можно манипулировать. Сам тренинг очень сильно ждали и хотели увидеть не только в Москве, но и в остальных городах (ссылка на статью на Хабре с опросом). И исходя из того что сам я живу в Санкт-Петербурге, анонсирую его грядущее проведение именно в этом городе. Прошу заметить, что время проведения этой мини-конференции — вечернее. Это сделано для того чтобы Вы смогли сходить на него не отпрашиваясь с работы и не беря отгул. На этот раз день проведения — четверг. А это значит что у вас будет свободен вечер пятницы. А это, согласитесь, прекрасно -)

На текущей мини-конференции появилась новая тема — декомпиляция и обратная компиляция. Разбор библиотеки Mono.Cecil и личного опыта замены ей продукта PostSharp.

На этой мини-конференции будут освещены следующие темы:
  • Управление памятью .Net/Windows/процессора
  • Строение объектов .Net в памяти
  • Передаем объекты между AppDomains без сериализации: без накладных расходов.
  • Как работают исключения? Вклиниваемся в процессы обслуживания исключений.
  • Пишем пул объектов вне .Net памяти
  • Пишем ядро Memory Profiler’а — делаем дамп виртуальной памяти с распознанием .Net объектов в ней.
  • Пишем метод fork(): метод, создающий поток, который стартует с того же места, на котором был вызван fork (ветвление потоков) — C++/CLI/asm
  • Декомпиляция, редактирование и обратная компиляция. Что такое MSIL и так или он прост?


Картинка для затравки (после вызова CloneThread, текущий поток ветвится на два, каждый из которых идет в свою часть условия if):

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

Microsoft Research запустила браузерную игру-головоломку по обучению программированию

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


Microsoft Research в своем блоге анонсировала запуск браузерной игры-головоломки Code Hunt по обучению программированию на C# и Java.
Игроку даются фрагменты кода с заранее неизвестной функциональностью. Цель игры заключается в том, чтобы на основе входных данных и ожидаемого результата, изменить код метода или функции так, чтобы выходные данные соответствовали этому ожидаемому результату.
Читать дальше →

Ещё один Pattern Matching на C#

Время на прочтение4 мин
Охват и читатели17K
Последнее время в процессе работы с языком C# я стал всё острее и острее нуждаться в механизме сопоставления с образцом, который присутствует во многих современных мультипарадигмальных языках (F#, Scala и т.д.), но отсутвует в C#. Найденые благодаря получасу гугления реализации (Пример) предлагали конструировать match-выражения посредством fluent-интерфейсов, что, на мой взгляд, довольно громоздко синтаксически. Вторым, уже более существенным для реального использования, недостатком является overhead на перебор предикатов в цикле, происходящий «под капотом» в таких мэтчерах. В общем, я задался целью написать собственную реализацию сопоставления с образцом, руководствуюсь двумя основными принципами:
  • Синтаксически приблизится к «нормальным» конструкциям как в F#/Scala
  • Приблизиться по производительности к коду с if/else if/else насколько это возможно


За тем, что получилось — прошу под кат
Читать дальше →

C#/WPF + Pascal + Assembler: как я восстанавливал свою первую игру

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


Рылся я как-то раз в своих исходниках школьных времён, и обнаружил там следующее:
  • Игру на QBasic про космический корабль, расстреливающий астероиды. Жуткий код под дос, зато спрайты анимированы в 3ds Max.
  • Графическую библиотеку на Pascal/Assembler с неплохой скоростью работы
  • Лицензионный компилятор TMT Pascal, который может собирать код под Win32

Не пропадать же добру! Далее — история всего этого, немного ностальгии, и детали реализации «современной» версии игры с использованием старых спрайтов и кода для графики.
Читать дальше →

Звездные войны в исходном коде

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

У меня давно была идея реализовать что-нибудь интересное, связанное с квайнами. И наконец-то получилось довести это дело до конца. Когда-то увидел реализацию игры «Жизнь» в исходном коде: Self Printing Game of Life и мне захотелось сделать нечто похожее. Некоторое время поразмыслив, я вспомнил, что существует ASCII-графика. Но еще интересней и сложнее было бы сделать анимацию в ASCII-графике. Пример долго искать не пришлось, почти сразу же были найдена анимация «Звездных войн», а точнее 4 эпизода «Новая Надежда» под названием Asciimation. Работа японского программиста Yusuke Endoh «квайновая эстафета» также подстегнула меня к реализации этой идеи. В процесс реализации такого «фильма» пришлось решить множество других проблем, о чем, впрочем, жалеть не пришлось.

Получившийся исходник вот: gist. Для облегчения «просмотра» там также содержится скрипт, который и будет крутить всю анимацию. Исходники же всего проекта для его генерации, интерфейса и других утилит выложены на гитхабе: Freaky-Sources (Туда же включены квайны-палиндромы, о которых я уже писал). Понятное дело, что подобная вещь не несет в себе никакой практической пользы, это просто just for fun.
Желающие ознакомиться с деталями реализации, добро пожаловать под кат!

Детали реализации стека — часть вторая

Время на прочтение5 мин
Охват и читатели25K
image Несколько человек спрашивали меня, в контексте моего предыдущего поста о значимых типах, почему же всё-таки значимые типы располагаются на стеке, а ссылочные нет.

Если коротко, то «потому что могут». И т.к. стек «дёшев» мы располагаем их на стеке, когда только это возможно.

Длинный ответ он … длинный.
Читать дальше →

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

Crazy Cube World Game. Создание. Часть 1

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


Здравствуй Хабр! Вот и я решился на написание своего первого поста. И поводов для этого предостаточно. Появилось свободное время, и я решил воплотить свою идею в жизнь. Как уже понятно из названия это игрушка Crazy Cube World Game (Сумасшедший мир кубиков). В первом посте расскажу о самой концепции игры. Я уже давно занимаюсь сборкой серверов Minecraft, копался в исходниках игры, модов. Изучал прочие песочницы и как по мне так всегда чего не хватало. Это все и привело к созданию игры. В целом она будет представлять из себя некую смесь RPG, песочницы с неограниченным открытым миром.

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

Детали реализации стека — часть первая

Время на прочтение3 мин
Охват и читатели28K
image
Какое-то время назад я писал о том, что «ссылки» — это не «адреса», когда речь идёт о C# и размещении его объектов в памяти. Хотя это действительно так, но это всего лишь деталь реализации, но не смысл «ссылки». Другая деталь реализации, которую часто путают с сутью — это то, что «память под значимые типы (value types) выделяется на стеке». Я часто это вижу, потому что именно так написано в нашей документации.

Практически каждая статья, которую я вижу, подробно описывает (часто неверно) что такое стек и что основное различие между значимыми и ссылочными типами — это то, что значимые типы располагаются на стеке. Я уверен Вы можете найти множество примеров таких статей в сети.
Читать дальше →

CLRium: до конца регистрации — 4 дня

Время на прочтение3 мин
Охват и читатели4.8K
Впереди череда выходных, на которых можно отлично и полезно провести время. И на мой скромный взгляд, когда современный человек имеет тысячи дел, отвлекающих его от возможности расширить свои знания, наличие мастер-класса будет очень полезным. Ведь это как минимум возможность прийти и не отвлекаясь на домашние хлопоты сделать что-то интересное, полезное, а главное – новое для себя.
Несколько дней назад (а кажется, еще вчера) я опубликовал анонс мастер-класса по .Net Framework Internals, который сегодня был назван CLRium. На этой мини-конференции будет показано, как работает любое .Net приложение, и как внести в .Net приложение возможности, которые не закладывались при проектировании платформы. Зачем? Каждый из вас может преследовать свои интересы. Однако, на мой взгляд, можно вывести несколько групп интересов:

  • Вам очень интересно, как .Net Framework работает. Ведь если узнать как оно работает, можно понять ее сущность и начать как-то по-другому относиться в самой платформе. Без единорогов, розовых очков и фей в виде Garbage Collector’а;
  • Вы хотите подтянуть знания чтобы с легкостью отвечать на собеседованиях глубже чем требовалось, тем самым забирая более оплачиваемые вакансии
  • Вам интересно понять как можно легко и непринужденно взламывать .Net приложения в режиме реального времени (в, конечно же, академических целях, не нарушая законодательства и без злого умысла. Ну вы поняли)


Однако чем бы вы ни руководствовались, вы начнете понимать, почему в .Net Framework что-то сделано так или иначе. Откуда растут ноги не правильного подсчета count++ в разных потоках, почему сделали ThreadPool, почему есть потоки, а есть процессы… И на множество других вопросов, корни которых уходят за пределы платформы.
Читать дальше →

Мастер-класс по нутрям .Net Framework

Время на прочтение3 мин
Охват и читатели21K
< Прежде всего хочу отметить что я имею ввиду под internals. В данном случае я имею ввиду именно внутренние структуры данных .Net Framework. Ведь, находясь под его опекой, что мы видим? Стройную архитектуру классов, строгую типизацию, настройки безопасности. И все вроде как автомагически работает и не надо ни о чем задумываться. И вроде как даже прекрасно. Но вы по сути, находитесь в Матрице. В Матрице, о законах которой вы знаете только понаслышке. Что GC работает именно так, вам сказали. Но Вы ведь не уверенны что это именно так?

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

Я очень надеюсь, что программа Вам очень понравится, т.к. по сути — это результат собственных исследований, и все что тут есть, нагуглить не получится.
Читать дальше →

Использование Yandex MapKit совместно с элементами управления Pivot и Panorama

Время на прочтение4 мин
Охват и читатели6.4K
Основная страница нашего приложения построена с использованием элемента управления Pivot, на одной из закладок которого необходимо было разместить карту с информацией о местоположении автомобиля. Пользователям нашего приложения было решено предоставить выбор между сервисами карт от компании Микрософт и компании Яндекс.

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

Однако с интеграцией элемента управления для отображения карт входящего в Yandex.Map MapKit от компании Яндекс возникли неожиданные сложности. Попытки манипуляции картой в горизонтальной плоскости приводили к переключению текущей закладки элемента управления Pivot.
Читать дальше →

Компиляция исходников (cpp, cs) компилятором Visual Studio без запуска IDE в Windows

Время на прочтение16 мин
Охват и читатели42K
Частенько нет необходимости запускать тяжеловесную IDE Visual Studio для компиляции небольших приложений, проведения каких-либо тестов кода, не требующего полномасштабной отладки. В подобных случаях можно оперативно собрать приложение в консольном режиме, используя возможности предоставляемые компилятором от Microsoft (cl.exe) и запускными модулями IDE (devenv.exe, msdev.exe). Далее приводится код файлов сценариев (cmd) интерпретатора командной строки Windows, который с небольшими изменениями каждый может настроить под себя, с учётом путей к Visual Studio в своей системе.
Подробности

MVVM Framework для Windows Phone своими руками. Часть 1

Время на прочтение11 мин
Охват и читатели13K
Разработка приложений для платформ WPF, Silverlight, Windows Store и Windows Phone, почти всегда подразумевает использование паттерна MVVM. Это закономерно, так как базовой философией этих платформ, является разделение представления (так же я буду использовать термин интерфейс пользователя) и остальной логики программы. Этот подход позволяет получить следующие преимущества:

  1. Разделение пользовательского интерфейса и логики представления: что позволяет дизайнерам работать над пользовательским интерфейсом, а программистам над бизнес логикой приложения используя для взаимодействия абстрактный интерфейс модели представления
  2. Расширенные возможности автоматизированного тестирования: отделение пользовательского интерфейса от остальной логики, позволяет полностью протестировать логику представления без ограничений накладываемых автоматизацией тестирования через пользовательский интерфейс
  3. Множественные представления для одной модели представления: одна модель представления может использоваться многими реализациями интерфейса пользователя. Например, сокращенный и полный вариант представления данных, интерфейс зависящий от прав пользователя. Возможность использовать одну реализацию модели представления на различных платформах
  4. Расширенные возможности повторного использования компонентов: так как модели представления отделены от реализации представления, возможны любые варианты их использования, наследование от базовых моделей, композиция нескольких моделей и т.п.


Разрабатывая приложения под платформу Windows Phone, я столкнулся с тем, что большинство статей описывают базовую реализацию паттерна MVVM, которая обычно сводится к реализации в классе модели представления интерфейса INotifyPropertyChanged, создания простой реализации ICommand и простые сценарии связывания этих данных с представлением. К сожалению, остаются за рамками обсуждения такие важные вопросы как, реализация обобщенных классов с удобным интерфейсом, синхронизация потоков при асинхронном исполнении, навигация на уровне модели представления и многие другие.

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

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