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

Компания Семинары Станислава Сидристого временно не ведёт блог на Хабре

Сначала показывать

CLRium, последний анонс перед Москвой

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

03-04 Апреля в Москве, 17 мая — в Екатеринбурге и 29-30 мая — в Санкт-Петербурге пройдет серия семинаров CLRium Это значит, что всего через 1,5 недели наш зал, предоставленный Фондом Развития Интернет-Инициатив будет готов принять почти что до 300 интересующихся разработчиков. Также появилась оплата в PayPal!

Мы с Андреем Акиньшиным на данный момент тратим все свое время на подготовку к мероприятию так, чтобы оно вам понравилось и запомнилось. Напоминаю сетку вещания (онлайн, Москва, Питер, Екатеринбург)
Читать дальше →
Всего голосов 18: ↑15 и ↓3+12
Комментарии8

MSBuild — в Open Source на github

Время на прочтение2 мин
Количество просмотров19K
Сегодня мы особенно рады сообщить что MSBuild (наверное, самая часто используемая и самая таинственная по документированности — прим. перев.) — теперь доступен на github и мы вносим его в список .NET Foundation! The Microsoft Build Engine (MSBuild) — это платформа для построения приложений. Вызывая msbuild на вашем проекте или решении, вы можете организовывать и собирать свои продукты в окружениях, где нет установленной MS Visual Studio. Например, MSBuild используется чтобы собирать такие Open Source проекты, как .NET Core Libraries и .NET Core Runtime.



Ядро, библиотеки, миграция на Mac/Linux, msbuild… Еще немного и я поверю в выход на github MS Visual Studio.
Читать дальше →
Всего голосов 45: ↑40 и ↓5+35
Комментарии17

Введение в ASP.NET 5

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

Первый предварительный релиз ASP.NET 1.0 вышел практически 15 лет назад и с тех пор миллионы разработчиков использовали его чтобы создавать и запускать различные приложения., а мы на протяжении этих лет добавляли в совокупности колоссальное количество кода и возможностей.

Я сегодня сильно взволнован из-за того что пишу новость о новом релизе ASP.NET, над которым работает наша команда, и который называется ASP.NET 5. Этот релиз – одно из самых значимых обновлений архитектуры, которое мы делали когда-либо. В рамках этого релиза мы сделали ASP.NET более компактным, модульным и кросс-платформенным, а также ориентированным на облачные хостинги. ASP.NET 5 Preview доступна для скачивания в последнем Visual Studio 2015 CTP, которая стала доступна совершенно недавно.
Читать дальше →
Всего голосов 40: ↑37 и ↓3+34
Комментарии15

CLRium #2: ASP.NET и DNX (.Net Execution Environment) – на новейшем ядре CoreCLR. Отдыхаем душой на Enterprise с Roslyn

Время на прочтение4 мин
Количество просмотров8.8K
Что мы можем накопать в Интернетах про самое свежее, о чем есть только слухи? Наш ответ – ничего, что могло бы пролить свет на вопрос. Например, что такое DNX? Репозиторий проекта нам говорит:

DNX (среда исполнения .Net) – содержит код, необходимый для загрузки приложения и его работы, в том числе систему сборки, SDK и CLR хоста.

Лично мне до недавних пор это не говорило ровным счетом ничего, как, наверное, и вам. А ведь это – будущее ASP.NET.

Или, например, многие не понимают, отчего все сходят с ума от возможности запуска ASP.NET 5 на Linux под новейшим ядром CoreCLR… А ведь не сегодня – завтра начнут появляться вакансии разработчиков ASP.NET под Линукс и все мы с вами вдруг поймем: мы старики, а молодые – уже изучили и знают, захватив все дорогостоящие вакансии.

И вообще… Сколько рантаймов сейчас? Куда делся мир с одним-единственным CLR, и почему он вдруг перестал всех устраивать??

Как узнать первым?
Всего голосов 23: ↑20 и ↓3+17
Комментарии6

Семинар по анатомии .Net, Roslyn, CoreCLR, CoreFX, декомпиляции, хакерству

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


Наверняка, прочитав заголовок, вы уже поняли, что речь идет про CLRium, который уже анонсирован в Москве (03-04 апреля) и Санкт-Петербурге(29-30 мая). Но теперь его оффлайн могут посетить жители города Екатеринбурга.

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

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

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

Чем мы еще выделяемся? Ценой! Всего за 2,000 можно сходить на семинар и, возможно, получить новое хобби, которое отогреет вас, как программиста и даст не один день беспрерывного кодинга нового расширения на Студию или копания в ядре CoreCLR.

cool Полный список тем выступлений и ссылки на регистрацию — под катом
Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии2

Семинар по анатомии CLR и .Net Framework. Roslyn, CoreCLR, CoreFx, Nitra, RyuJIT

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

03-04 Апреля в Москве и 29-30 мая — в Санкт-Петербурге пройдет серия семинаров CLRium. У данного семинара нет определенной целевой аудитории, мы рады всем. И начинающим свою карьеру, разработчикам, и махровым, повидавшим виды, архитекторам.

Как люди и хотят, у нас будут не просто технические доклады, без воды и маркетинга. У нас будет много тем, одна из которых — настоящая разминка для мозгов. Мы будем по дампам памяти понимать как устроена CLR и как с ней взаимодействовать не привычным для всех способом — напрямую.

У нас будет:
  • Максимально глубокие, отборные доклады по редко-раскрываемым вопросам
  • Целый вечер, посвященный исключительно ядру .Net. Как с ним работать «без перчаток», напрямую, со структурами в памяти, без рефлексии.


Чем мы гордимся:
  • Наш материал не встретишь в сети Интернет: он полностью авторский
  • Материал освещает самые интересные области .Net, которые почему-то не покрыты материалом.
  • Мы не берем лишних денег с вас и потому у нас — самая дешевая конференция и всех существующих. 2,000 рублей за два дня — такого не предлагает никто. Это ведь как в магазин сходить.

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

Ядро .Net (GC, JIT, interop, ...) в Open Source

Время на прочтение5 мин
Количество просмотров36K
Мы рады сообщить что CoreCLR теперь находится на github и теперь вы имеете доступ ко всем его исходным кодам. CoreCLR является средой исполнения .NET Core, выполняя такие функции как сборку мусора или компиляции в конечный машинный код. .Net Core – это модульная реализация .Net, которая может быть использована как база для огромного количества сценариев, масштабы которых варьируются от простых консольных утилит до веб-приложений, хостящихся в облаке. Чтобы понять, чем отличается .Net Core от .Net Framework, посмотрите на пост «Введение в .Net Core»

Теперь вы можете скачивать исходники CoreCLR, бранчеваться, и делать pull requests, также вы можете компилировать его прямо на своем ПК. Мы выпустили полную и актуальную реализацию CoreCLR, которая включает RyuJIT, .Net GC, родной Interop и множество других компонент .Net runtime. Данный релиз следует тем же принципам, что и все наши последние релизы библиотек, вышедших в open-source: сделать весь .Net Framework open sourced.

Сегодня ядро .Net компилируется и отрабатывает (видимо имеется в виду CI) на Windows. Мы добавим имплементации для специфических для Mac и Linux платформенных вещей в ближайшие пару месяцев. Также мы уже имеем некоторый специфический для Linux код в .Net Core, однако мы только начали портировать с Windows на остальные платформы. Напротив, мы хотели открыть исходные тескты с самого начала, чтобы вы вместе с нами пропутешествовали бы к другим платформам, возможно, внося свой вклад.
Читать дальше →
Всего голосов 74: ↑64 и ↓10+54
Комментарии40

Баг в CLR: как затащить объект в песочницу без маршаллинга и вызвать Callback

Время на прочтение3 мин
Количество просмотров8K
Добрый день! Надеюсь, я уже завоевал на Хабре достижение «узнал автора по заголовку» -) Однако сегодня речь пойдет о свежей, еще не закрытой уязвимости в .Net, на которую меня навел своей мыслью один человек (кто подкинет ему инвайт?), который написал мне на почту:

Вы пытались IL кодом приводить объекты к строковому типу и передавать в другие домены?


Сначала я его не понял, но потом родился пример кода, который пробрасывает любой объект типа, находящегося в SharedDomain в песочницу и позволяет использовать его методы БЕЗ маршаллинга.

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

Первое, что нам понадобится — это ставшие обыденностью, методы EntityPtr.ToPointer() и *.ToInstance() из DotNetEx. Их комбинация заставляет приводить объект к несовместимому типу. Т.е. к тому типу, которым он не является:
string str = EntityPtr.ToInstance<string>(EntityPtr.ToPointer(new List<int>()));

Естественно, если вызвать любой метод у такой «строки», ничего не получится: вылетит Exception (кроме виртуальных методов от object — их позиции в таблице вирт методов совпадут с переопределенными в нашем типе и вызов произойдет корректно)

Однако, поскольку строка является уже сериализованным объектом, то при маршаллинге она передается по ссылке, без копирования. Это значит, что мы можем прокинуть ее в метод, код которого выполняется в «песочнице» и там, внутри, сделать кастинг обратно в тип.
Читать дальше →
Всего голосов 28: ↑24 и ↓4+20
Комментарии9

Делаем отгружаемые сборки: взаимодействуем между доменами без маршаллинга

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


Ссылка на проект в GitHub: DotNetEx

На множественных ресурсах время от времени задается вопрос. Можно ли сделать отгружаемые сборки с текущего домена? Так, чтобы попользовался и «давай, до свидания!»? Везде и всегда ответ, который давался – это «нет». Ведь единственное, что можно выгрузить – это домен. Соответственно, если хочется наладить отгрузку, сборку надо помещать в домен, и налаживать между доменами взаимодействие через сериализуемые типы. А это — очень медленное взаимодействие. А мы скажем так. Можно. С ньюансами. Загружать мы будем также в отдельный домен. Но отменим сериализацию при вызове методов между доменами.

Вопросы, которые мы будем решать:
  • Создание домена с возможностью отдачи объекта из домена в родительский
  • Выгрузка сборки

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

Снимаем дамп объектов с памяти .Net приложения

Время на прочтение11 мин
Количество просмотров23K
Продолжаем тему интересного на .Net, от чего мир Java будет посмеиваться (хотя у них это также возможно сделать), а приверженцы С++ говорить: «чего они только не сделают чтобы не учить C++».

В данной заметке мы напишем по сути – простенькое ядрышко профилировщика памяти для платформы .Net, который будет снимать дамп с SOH кучи (а в перспективе и с LOH).

Для написания статьи нам понадобится код из статьи Получение указателя на объект .Net и Ручное клонирование потока (измерение размера объектов).

Наши цели на сегодня:
  • Научиться итерировать кучу .Net
  • Научиться находить начало кучи .Net
  • Попробовать сытерировать все объекты чужого домена.


Ссылка на проект в GitHub: DotNetEx

Читать дальше →
Всего голосов 31: ↑27 и ↓4+23
Комментарии6

Roslyn: встреча .Net сообщества на CLRium #2

Время на прочтение2 мин
Количество просмотров7.9K
Довольно долгое время я пытался изучить Roslyn, но как и все мы, столкнулся с единой проблемой: времени на это абсолютно не было. Как обычно решается этот вопрос? Мы идем на множество ресурсов и ищем доклады и статьи на интересующую нас тему и как по шаблону повторяем движения автора, который показывает как этим пользоваться. С чем мы сталкиваемся, когда ищем описания тем, предложенных на CLRium? Мы не находим ничего. Т.е., конечно, Google выдает что-то по запросам “Roslyn”, “Roslyn samples”, но все-таки это тысячу раз разжеванные примеры, и притом древние как мамонты по меркам выхода новых версий CTP. Это важно, т.к. наличие информации предполагает развитость той или иной инфраструктуры. А самая крутая но не единственная статья по Roslyn на данный момент — это эта: Roslyn для автоматического перевода кода C# в 1С-код
Отсюда и возникли идеи рассказать на CLRium про Roslyn, RyuJIT, CoreFx, шаринг объектов между процессами и прочие вопросы, на которые сложно найти ответы в сети Интернет.
Список тем, которые будут раскрыты Кодом
Всего голосов 20: ↑17 и ↓3+14
Комментарии10

Продолжаем кромсать CLR: пул объектов .Net вне куч SOH/LOH

Время на прочтение6 мин
Количество просмотров18K
Добрый день, уважаемые разработчики (просто не знал, с чего начать пост). Предлагаю перед тем как начнется трудовая неделя немного подразмять мозги (совсем немного) и построить свой Small Objects Heap для .Net. Вернее даже не Small Objects Heap, а Custom Objects Heap.

Как все мы знаем, в .Net существует две группы куч: для больших и малых объектов. Как выяснить, во сколько нам обойдется объект можно при помощи кода из этой статьи (он нам пригодится): Ручное клонирование потока, а получить указатель на объект и по указателю получить сам объект можно научиться, прочтя эту статью: Получение указателя на объект .Net. Также нам понадобится статья корейского (южно-) программиста по перенаправлению указателя на скомпилированную часть метода на другой метод: 실행 시에 메서드 가로채기 — CLR Injection: Runtime Method Replacer 개선

Так что давайте поэкспериментируем и напишем библиотеку, которая позволит:
  • Аллоцировать участок памяти
  • Разметить его как набор объектов определенного .Net типа
  • Выделять объекты с этой памяти
  • Возвращать их обратно


Ссылка на проект на GitHub: DotNetEx

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

Интересное по хабу .Net за 2014 год

Время на прочтение2 мин
Количество просмотров26K
Мы с вами люди рабочие и зачастую не замечаем ничего что происходит за пределами нашей работы. Так и я, работая изо дня в день, знаю только про свой SpecFlow и смежные вопросы. Но ничего – по сторонам. Этим постом я хочу восполнить пробелы новостей в области .Net

Новости хаба .Net на Хабре занимают 33 страницы или 328 постов. Что говорит о том что новости появляются почти каждый день =) Посмотрим на самое интересное из них (на мой скромный взгляд). Ну и загляните под кат: до ката, конечно же, не все.

Доступен новый JIT: теперь с поддержкой SIMD
Как работает декомпиляция в .Net или Java на примере .Net
Microsoft раскрыла исходный код компилятора С#
Consulo: ~1000 коммитов, или как прошла осень
Под капотом у Stopwatch
Как тестировать код финализатора (c#). Послесловие: тест все-таки упал
Посмотреть на прочие статьи
Всего голосов 33: ↑27 и ↓6+21
Комментарии0

Встреча .Net сообщества на CLRium #2. Как устроен и работает CLR, Roslyn, RyuJIT, CoreFx

Время на прочтение4 мин
Количество просмотров8.5K
Я не люблю заезженное слово «конференция». Это — встреча разработчиков с общими интересами, которые хотят послушать о трюках, которые позволяют обходить правила, установленные в.Net Framework, которым интересна тема использования меняющих и создающих языки, тулов. А также, что можно получить если знаешь как компилировать и декомпилировать приложение. Об этом не говорят. Потому что разговор на эту тему слишком долгий чтобы уместить в формат одного часа стандартного выступления на конференциях. Я пробовал выступать на .NEXT, и помимо положительных отзывов были «галопом по Европам». Согласен, за час не уложиться. Добро пожаловать в полный формат!

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

Теперь у нас целых два дня. Причем вы можете купить билет как на один, так и на оба дня. Первый день — как в прошлый раз: много хардкора, не практичного, но очень интересного… Позволяющего еще лучше понять как все работает и как этим можно воспользоваться… Тем со временем еще немного накидаю. Много мяса на любителя. И второй — практика. Второй длиннее первого. На час =). Во второй день будет очень много Roslyn, JetBrains Nitra (он же N2, он же Nemerle2)? RyuJIT, .Net Framework open sourced. Вот честно, я бы сам сходил

Почитать и зарегистрироваться



cool Примеры статей и полный список тем выступлений — под катом
Читать дальше →
Всего голосов 28: ↑24 и ↓4+20
Комментарии0

Как работает декомпиляция в .Net или Java на примере .Net

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

Сегодня хотелось бы поговорить про декомпиляцию приложений (все применительно к той же Java, да и любому языку с некоторыми допущениями и ограничениями, но поскольку сам я — .Net разработчик, примеры будут совсем немного MSIL'овизированы :) ).

Для вводной, перечислю текущие средства декомпиляции в мире .Net:
  • JetBrains dotPeek (поддержка R# хоткеев, сервер символов)
  • Telerik JustDecompile (также не плохой, множество хоткеев)
  • RedGate Reflector (аналог dotPeek, но платный. Изначально был основным в мире .Net, но пока был бесплатным)
  • icsharpcode ILSpy (хороший, opensource. Полезен, когда вы сами пишете код, использующий Mono.Cecil, т.к. Это даст лучшее понимание его работы)
  • 9rays Spices .Net Decompiler
  • Dis# с функцией inplace editor

Для программной декомпиляции:
  • Mono.Cecil (основной, самый крутой декомпилятор в мире .Net. На выходе получаете объектное «зеркало» содержимого сборки. Т.е. Максимально-упрощенно, без наворотов типа конвертации массива IL в DOM).
  • ICSharpCode.Decompiler (надстройка над mono.cecil, переводящая array[MSIL] в DOM, где есть циклы, switches и if'ы. Является частью SharpDevelop/ILSpy)
  • Harmony Core (аналогичное от меня, но сохраняющее информацию о символах. В среднем состоянии, не готова для прода, помощь приветствуется).


А теперь, хотелось бы описать как они работают (вам же интересно, как работает машинка от JetBrains?). Чтобы как минимум понять, насколько это сложно: написать свой декомпилятор .Net сборки обратно в код на C#.



Читать дальше →
Всего голосов 45: ↑41 и ↓4+37
Комментарии28

Механика неформального общения разработчиков C# на конференции

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

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

В Москве в C# есть сложившийся рынок труда с уровнем сопротивления в 120-130.000 и условным потолком в 180.000 рублей. На этих уровнях достаточное предложение качественной рабочей силы при ограниченном количестве позиций. Скоро этот рынок будет перекроен из-за изменения курса доллара. Как быстро дойти до этих уровней и даже преодолеть их?

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


Читать дальше →
Всего голосов 30: ↑25 и ↓5+20
Комментарии13

Изменение кода системных сборок или «утечка» .Net Framework 5.0

Время на прочтение17 мин
Количество просмотров36K
Здесь я продемонстрирую возможность, которая по своей сути — самый настоящий хак. Вопрос, зачем это может понадобиться? На самом деле целей для этого может быть огромное множество. Итак наша задача — изменить код библиотеки mscorlib таким образом, чтобы все программы, которые ей пользуются, получили эти изменения. Не рантайм, конечно, а во время старта (для runtime необходимо проделать другие вещи, и тут надо оговориться что изменения эти не должны поломать текущие состояния библиотеки). Mscorlib я взял как пример, потому что она есть у всех на компьютере. Но можно хакать любую другую.

Все мы знаем, что для того, чтобы не было «ада dll», Microsoft помимо обычных версий и названия библиотек, дали возможность подписывать сборки ключом, public key которой гарантирует что конкретная сборка «пришла» от конкретного разработчика, а не от какого-то другого. Поэтому, если мы хотим по какой-то вполне добросовестной причине изменить код существующей библиотеки т.о., чтобы она загрузилась в чужой процесс и при этом ключик public key остался тем же, у нас этого не получится. Потому что мы не сможем ее подписать, у нас нет закрытого ключа.

Наша мини цель, чтобы программа вывела на консоль текст:



Читать дальше →
Всего голосов 67: ↑65 и ↓2+63
Комментарии15

Ручное клонирование потока. Когда Assembler + C# = Love

Время на прочтение3 мин
Количество просмотров20K
Перейду сразу к делу. Задача: в любой точке кода путем вызова спец. метода создать второй поток, который начнет выполнение с точки вызова этого метода в родительском потоке, сохранив возможность отладки и значения всех локальных переменных на всех уровнях вызовов методов.

Реализация не зависит от конечной платформы (.Net/Java), т.к. написана на C++/Asm, однако пользовательский код сделан на C#, т.к. на нем пишу я.

image

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



Читать дальше →
Всего голосов 47: ↑38 и ↓9+29
Комментарии32