Я думаю, что Microsoft пытается продать нам F# как что-то новое и крутое, но у меня серьезные проблемы с пониманием приемуществ F# перед C#.
Владимир @32bit_me
Программист
Автоматизация Undo/Redo функциональности с помощью .NET Generics
11 min
6KTranslation
Перевод статьи Automating Undo/Redo with .NET Generics Сергея Архипенко.
Введение
Эта статья описывает библиотеку, которая предоставляет undo/redo функциональность для каждого действия в вашем приложении. Вы можете использовать сложные структуры данных и сложные алгоритмы не задумываясь о том, как они будут переведены в предыдущее состояния по запросу пользователя или в результате возникновения ошибки.
Предпосылки
Если вы когда-нибудь разрабатывали графический редактор или дизайнер для сложных данных, вы сталкивались с трудоёмкой задачей реализации undo/redo функциональности, которая бы поддерживалась во всём приложении. Реализация парных Do и Undo методов для каждой операции скучный и подверженный ошибкам процесс, когда вы разрабытываете что-либо более серьёзное, чем калькулятор. В результате моих экспериментов я нашёл способ сделать поддержку undo/redo прозрачной для бизнес логики. Чтобы этого добиться, мы будем использовать магию generics.
Этот проект опубликован на CodePlex, чтобы каждый мог его использовать или внести свой вклад.
Введение
Эта статья описывает библиотеку, которая предоставляет undo/redo функциональность для каждого действия в вашем приложении. Вы можете использовать сложные структуры данных и сложные алгоритмы не задумываясь о том, как они будут переведены в предыдущее состояния по запросу пользователя или в результате возникновения ошибки.Предпосылки
Если вы когда-нибудь разрабатывали графический редактор или дизайнер для сложных данных, вы сталкивались с трудоёмкой задачей реализации undo/redo функциональности, которая бы поддерживалась во всём приложении. Реализация парных Do и Undo методов для каждой операции скучный и подверженный ошибкам процесс, когда вы разрабытываете что-либо более серьёзное, чем калькулятор. В результате моих экспериментов я нашёл способ сделать поддержку undo/redo прозрачной для бизнес логики. Чтобы этого добиться, мы будем использовать магию generics.Этот проект опубликован на CodePlex, чтобы каждый мог его использовать или внести свой вклад.
+34
Программа из одного exe
4 min
43K
Однако существуют программы, использующие сторонние библиотеки, но при этом состоящие из одного единственного файла. Все утилиты от SysInternals, а также любимый мной LINQPad представляют из себя один файл в котором содержится все, что требуется для работы. Пользоваться такими утилитами одно удовольствие — они сразу готовы к использованию, их удобно передавать и хранить.
В статье рассказывается, как создавать такие автономные программы из одного файла. Разобран пример как со сжатием зашить библиотеку AutoMapper в программу и как ее потом достать и использовать.
+60
Слабые события в C#
11 min
81KTranslation
От переводчика
Недавно в проекте, где я работаю, мы столкнулись с проблемой утечки памяти. Прочитав множество статей — от рассказов по управлению памятью в .NET до практических рекомендаций по правильному освобождению ресурсов, я в том числе наткнулся на статью, в которой рассказывается, как корректно использовать события. Ее перевод я и хочу вам представить.
Это топик из песочницы, с которым я попал сюда на Хабр.
+59
Как вы видите .NET / C# 5.0?
5 min
5.4KСовсем недавно мы получили релиз .NET / C# 4.0. Мы много говорили (и еще будем говорить) о новых возможностях и нововведениях новой платформы и языка. Но уже можно сделать какие-то выводы и подумать, что же мы хотим увидеть в новой версии .NET / C# 5.0?
+5
Unit-тестирование средствами .NET
8 min
60KОсновная идея юнит (или модульного, как его еще называют) тестирования – тестирование отдельных компонентов программы, т.е. классов и их методов. Разрабатывать код, покрытый тестами, весьма полезно, потому что при их правильном использовании практически исключается возможность регресии в истории развитии программы – «что-то новое добавили, половина старого слегла». Также сейчас весьма модна методология разработки “TDD” — Test Driven Development. Согласно ей, программист вначале разрабатывает набор тестов для будущей функциональности, просчитывает все варианты выполнения, и лишь потом начинает писать непосредственно рабочий код, подходящий под уже написанные тесты.
Так как существование тестов в программе является не только подтверждением квалификации разработчика, но и зачастую требованием заказчика, я решил заняться этим вопросом и «пощупать» тесты вблизи.
Так как существование тестов в программе является не только подтверждением квалификации разработчика, но и зачастую требованием заказчика, я решил заняться этим вопросом и «пощупать» тесты вблизи.
+7
C#: Этюды от Эрика Липперта
1 min
1.5KВозможно, вам нравятся головоломки и C#, и, может быть, вы даже решали некоторые из них в моем блоге здесь, на Хабре.
Теперь у вас есть возможность попробовать свои силы в решении головоломок более высокого уровня.
Если вы не слышали о парне по имени Эрик Липперт, то очень советую почитать его блог. Эрик — один из разработчиков компилятора C# и часто пишет о разных необычностях и странностях в работе компилятора и среды исполнения .NET, а главное, объясняет причины такого поведения. Он пишет настолько интересно и увлекательно, что у его блога даже есть перевод на русский.
В своей записи от 8 июля Эрик дает ссылку на видео, в котором он и Neal Gafter (который также является одним из разработчиков платформы .NET) рассматривают несколько головоломок на языке C#. Пока я успел посмотреть только три из них, но мне уже нравится их уровень. (Внимание: за каждой головоломкой идет ответ, если хотите подумать самостоятельно, не забывайте нажимать на паузу)
Рекомендую всем, кто хочет расширить свой познания в C#/.NET.
UPD: поскольку с отображением видео есть определенные проблемы, можно скачать видео напрямую. Для этого идем сюда, вводим в строке поиска puzzlers и выбираем справа Download
UPD2: проблемы с воспроизведением видео на исходном сайте скорее правило, чем исключение, поэтому я залил файл на файлообменник: depositfiles.com/files/7ej8pu7zt
Теперь у вас есть возможность попробовать свои силы в решении головоломок более высокого уровня.
Если вы не слышали о парне по имени Эрик Липперт, то очень советую почитать его блог. Эрик — один из разработчиков компилятора C# и часто пишет о разных необычностях и странностях в работе компилятора и среды исполнения .NET, а главное, объясняет причины такого поведения. Он пишет настолько интересно и увлекательно, что у его блога даже есть перевод на русский.
В своей записи от 8 июля Эрик дает ссылку на видео, в котором он и Neal Gafter (который также является одним из разработчиков платформы .NET) рассматривают несколько головоломок на языке C#. Пока я успел посмотреть только три из них, но мне уже нравится их уровень. (Внимание: за каждой головоломкой идет ответ, если хотите подумать самостоятельно, не забывайте нажимать на паузу)
Рекомендую всем, кто хочет расширить свой познания в C#/.NET.
UPD: поскольку с отображением видео есть определенные проблемы, можно скачать видео напрямую. Для этого идем сюда, вводим в строке поиска puzzlers и выбираем справа Download
UPD2: проблемы с воспроизведением видео на исходном сайте скорее правило, чем исключение, поэтому я залил файл на файлообменник: depositfiles.com/files/7ej8pu7zt
+17
Программируем под .Net Micro Framework
1 min
2.1KВот такая штука мне сегодня пришла по почте:

Это development board для разработки для ChipworkX от GHI Electronics.
Пока-что я только открыл коробку, и проверил работает ли оно.
Постараюсь писать на хабр по мере ознакомления с этим устройством, т.к. в Embedded программировании я полный новичок.

Это development board для разработки для ChipworkX от GHI Electronics.
Пока-что я только открыл коробку, и проверил работает ли оно.
Постараюсь писать на хабр по мере ознакомления с этим устройством, т.к. в Embedded программировании я полный новичок.
+20
.Net Micro Framework — Первые шаги
2 min
5.3KТизер был воспринят консервативно, но положительно, так что продолжаем.

Итак, коробку распаковали, кнопочки потыкали, повтыкали на отладочный вывод при запуске. Круто! Железяка-то работает.
Хотя, с другой стороны, она не делает ничего полезного.

Итак, коробку распаковали, кнопочки потыкали, повтыкали на отладочный вывод при запуске. Круто! Железяка-то работает.
Хотя, с другой стороны, она не делает ничего полезного.
+23
Еще одна причина, почему структуры — это плохо
3 min
3.5KСтолкнулся на работе с интересной точкой зрения. В проекте все мало-мальские data transfer objects сделаны структурами. На вопрос, зачем так было сделано, получил ответ, что таким образом данные защищаются от изменений. С одной стороны, да, звучит, в принципе, логично, любые методы получают только копию и не в силах ничего подменить.
+13
OnPropertyChanged со строгими именами
2 min
4.7KМеня дико бесит OnPropertyChanged. Он требует передачи ему строки с именем идентификатора… Мало того, что такой код не верифицируется компилятором, так еще и никакого Intellisence — тайпи весь идентификатор от начала до конца… А если опечатаешся — так проглотит и во время выполнения. Вобщем, нехорошая вещь. Но в MVVM без нее никуда, как и в WPF без MVVM.
Последняя проблема худо-бедно решалась вот таким костылем, содранным отсюда, который вызывался из OnPropertyChanged:
И вот сегодня я совершенно случайно нашел красивый способ избавится от него.
Последняя проблема худо-бедно решалась вот таким костылем, содранным отсюда, который вызывался из OnPropertyChanged:
[Conditional("DEBUG")]
[DebuggerStepThrough]
public void VerifyPropertyName(string propertyName)
{
// Verify that the property name matches a real,
// public, instance property on this object.
if (TypeDescriptor.GetProperties(this)[propertyName] == null)
{
string msg = "Invalid property name: " + propertyName;
if (this.ThrowOnInvalidPropertyName)
throw new Exception(msg);
else
Debug.Fail(msg);
}
}
И вот сегодня я совершенно случайно нашел красивый способ избавится от него.
+13
Распараллеливание задач. Случай «идеальной параллельности». Часть 2
13 min
18KПредлагаемые решения в .NET 4
Это вторая часть статьи, посвященной распараллеливанию идеальных циклов. В первой части были рассмотрены проблемы, возникающие при этом, и общие подходы к их решению. В этой мы поговорим о конкретных библиотечных компонентах, предоставляемых .NET 4.0 для поддержки этих задач.
Для распараллеливания «идеальных» циклов предоставляются следующие варианты:
- класс System.Threading.Tasks.Parallel с методами For (), ForEach ()
- Parallel LINQ с методом расширения AsParallel ().
+25
GLGDI+ или «переходим с GDI+ на OpenTK»
3 min
16KДумаю, многим приходилось сталкиваться с проблемой, что GDI+ тормозит, а тормозит, потому что не ускоряется железом.
Вот и я как-то писал редактор уровней

и понял, что GDI+ мне больше не хватает, нужно переходить на что-то ускоренное, причем за минимальное время. Немного погуглив, я решил остановить свой выбор на библиотеке OpenTK.
Вот и я как-то писал редактор уровней

и понял, что GDI+ мне больше не хватает, нужно переходить на что-то ускоренное, причем за минимальное время. Немного погуглив, я решил остановить свой выбор на библиотеке OpenTK.
+36
Ликвидатор велосипедов: часть 2
3 min
34K
В этом топике я затрону важную для многих тему — тему рисования графиков в платформе .NET. Вспомните: ведь наверняка когда-то было просто необходимо вывести на экран красивый график… И что происходило? Правильно, появлялся новый велосипед.
Часть первая из серии

+57
C# для начинающих. Лекция 1 — Введение
1 min
85KТопик опубликован по просьбе itdevelop, так что он будет отвечать на все ваши вопросы, а также плюсы кидать на его аккаунт. Спасибо за понимание.
Это первая лекция большого видео-курса для тех, кто хочет научиться программировать на языке С#. Поскольку это — вводная лекция, то хочу сразу предупредить, что сам процесс программирования начнется только со второй лекции. Здесь же я хочу вас познакомить с .NET Framework, чем удобна эта платформа, и как происходит перевод написанного вами кода на C# в код, понятный операционной системе.
Это первая лекция большого видео-курса для тех, кто хочет научиться программировать на языке С#. Поскольку это — вводная лекция, то хочу сразу предупредить, что сам процесс программирования начнется только со второй лекции. Здесь же я хочу вас познакомить с .NET Framework, чем удобна эта платформа, и как происходит перевод написанного вами кода на C# в код, понятный операционной системе.
+30
C# for beginners. Лекция 2. Hello, World! и знакомство с Visual C# Express 2010
1 min
5.7KПрежде всего, хотелось бы поблагодарить arinoki за публикацию первой лекции видеокурса, который вызвал большой интерес среди хабрапользователей. Благодаря вашим голосам, я могу выкладывать новые лекции от своего имени, а, прочитав комментарии я понял, что тема программирования на С# очень актуальна, а значит я буду и дальше стараться для вас и публиковать новые лекции.
Вышла вторая лекция видеокурса для начинающих программировать на C#. Вы познакомитесь со средой разработки приложений Visual C# Express, а также напишете свое первое
Разбор синтаксиса языка C# начнется уже в следующей лекции!
А теперь — по теме:
Вышла вторая лекция видеокурса для начинающих программировать на C#. Вы познакомитесь со средой разработки приложений Visual C# Express, а также напишете свое первое
"Hello, World!"
приложение. Также для студентов прилагается еще некоторая полезная информация. Приятного просмотра!Разбор синтаксиса языка C# начнется уже в следующей лекции!
-1
Visual C# for beginners. Лекция 3. Переменные и выражения
1 min
2.6KПриветствую вас, хабражители!
По плану публикую очередную лекцию для желающих начать программировать на языке C#.
По плану публикую очередную лекцию для желающих начать программировать на языке C#.
+9
Async в C#
4 min
96KПродолжение по ссылкам: часть II и часть III.
На PDC2010 Хейсберг объявил, что следующая версия C# будет поддерживать примитивы для удобной организации асинхронных вычислений, кроме анонса была представлена CTP версия расширения для студии (скачать), которая позволяет попробовать улучшенное асинхронное программирование уже сейчас.
Улучшение создано, чтобы облегчить комбинацию асинхронных операций, а так же для того, чтобы асинхронных код выглядел максимально приближенно к синхронному. Учитывая, что Silverlight версия .NET Framework содержит только асинхронную модель для работы с сетью, данное улучшение очень уместно.
Не смотря на то, что упрошенное асинхронное программирование является нововведением в C#, сам подход нельзя назвать инновационным, так как реализация async на основе монад есть в Haskell, F# и Nemerle. На самом деле поддержка языком монад позволяет реализовать даже большее, поэтому я был немного удивлен, когда посмотрел презентацию Хейсберга и понял, что в язык был встроен только частный случай.
На PDC2010 Хейсберг объявил, что следующая версия C# будет поддерживать примитивы для удобной организации асинхронных вычислений, кроме анонса была представлена CTP версия расширения для студии (скачать), которая позволяет попробовать улучшенное асинхронное программирование уже сейчас.
Улучшение создано, чтобы облегчить комбинацию асинхронных операций, а так же для того, чтобы асинхронных код выглядел максимально приближенно к синхронному. Учитывая, что Silverlight версия .NET Framework содержит только асинхронную модель для работы с сетью, данное улучшение очень уместно.
Не смотря на то, что упрошенное асинхронное программирование является нововведением в C#, сам подход нельзя назвать инновационным, так как реализация async на основе монад есть в Haskell, F# и Nemerle. На самом деле поддержка языком монад позволяет реализовать даже большее, поэтому я был немного удивлен, когда посмотрел презентацию Хейсберга и понял, что в язык был встроен только частный случай.
+40
Async в C# и SynchronizationContext
5 min
45KПродолжение: часть III.
Прошлая заметка о async (часть I) была введением. В этой я продолжу начатую тему: я расскажу о том, что async взаимодействует с SynchronizationContext, и как это влияет на разработку асинхронных графических приложений.
Тестовым полигоном будет пример DiningPhilosophers, который идет вместе с расширением для асинхронного программирования. Это программа — визуализация знаменитой задачи Дейкстры об обедающих философах (ссылка). Прежде, чем читать дальше, лучше ознакомиться с условиями задачи.

Прошлая заметка о async (часть I) была введением. В этой я продолжу начатую тему: я расскажу о том, что async взаимодействует с SynchronizationContext, и как это влияет на разработку асинхронных графических приложений.
Тестовым полигоном будет пример DiningPhilosophers, который идет вместе с расширением для асинхронного программирования. Это программа — визуализация знаменитой задачи Дейкстры об обедающих философах (ссылка). Прежде, чем читать дальше, лучше ознакомиться с условиями задачи.

+36
Книга The art of Unit Testing with Examples in .NET
4 min
20K
+38
Information
- Rating
- 5,179-th
- Date of birth
- Registered
- Activity