Обновить
104.93

.NET *

Хаб со знаниями про .NET

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

LINQ to Events — декларативная работа с асинхронным интерфейсом

Время на прочтение3 мин
Количество просмотров1.3K
Наткнулся на очень интересное расширение для LINQ позволяющее декларативно работать с асинхронным интерфейсом ( themechanicalbride.blogspot.com/2009/07/introducing-rx-linq-to-events.html ). Сейчас расширение существует как часть Silverlight Toolkit (Rx framework), но в последствии станет частью .NET 4.0 (System.Reactive.dll).

Идея в том, чтобы стереть границы между IEnumerable и IObservable интерфейсами (читай между Iterator и Observer паттернами). Асинхронные события представляются как последовательность данных, возвращаемых будто бы по yield return. А это в свою очередь позволяет работать с данной последовательностью через LINQ в функциональном, декларативном стиле.

Например, можно использовать LINQ для формулирования выражений о перетаскивании контролов:

IObservable<Event<MouseEventArgs>> draggingEvent =
    from mouseLeftDownEvent in control.GetMouseLeftDown()
    from mouseMoveEvent in control.GetMouseMove().Until(control.GetMouseLeftUp())
    select mouseMoveEvent;


Выражение гласит следующее: для каждого нажатия на левую кнопку мыши получить каждое событие перемещения мыши до тех пор, пока левая кнопка мыши не будет отжата.

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

Подобным образом можно тестировать GUI где переходы из состояния в состояние не мгновенны, а происходят с анимацией, окончания которой необходимо дождаться прежде чем производить обращения к свойствам контрола.

Rating rating = new Rating();
IObservable<Unit> test =
   ObservableExtensions
      .DoAsync(() => TestPanel.Children.Add(rating)) // добавить контрол на панель
      .WaitFor(TestPanel.GetLayoutUpdated()) // подождать пока появится
      .DoAsync(() => rating.Value = 1.0) // установить свойство
      .WaitFor(
         rating
            .GetActualValueChanged() // ждать пока не установится
            .SkipWhile(actualValueChangedEvent => // новое значение свойства
               actualValueChangedEvent.EventArgs.NewValue != rating.Value))
      .Assert(() => rating.GetRatingItems().Last().ActualValue == 1.0); // Assert

// очистка ресурсов по завершению теста
test.Subscribe(() => TestPanel.Children.Remove(rating));


Автор оригинального поста обещает в ближайшее время осветить межпоточное взаимодействие с использованием этого фреймворка.

Области применения


  • Построение КА для визуального интерфейса пользователя.
  • Координирование событий Workflow.
  • Координирование сообщений с периферийными устройствами. В том числе с сетью (веб-службами) и с любым асинхронным IO.
  • Работа с цепочками событий.

Адаптация под WPF


silverlight.codeplex.com/SourceControl/ListDownloadableCommits.aspx
evain.net/blog/articles/2009/07/30/rebasing-system-reactive-to-the-net-clr

Похоже, ветки кода, адаптированной под WPF, пока нет, но обещают добавить в .NET 4.0. Однако уже сейчас можно взять сырцы и поковырять вручную.

Bindable LINQ


Развитие идеи — осуществление биндинга к декларативно описанным цепочкам событий. При изменении зависимого свойства, GUI перерисовывается чтобы отразить изменения. В Rx этого сейчас нет. Однако подобная связь с INotifyPropertyChanged есть в следующих проектах (сами проекты пока не смотрел):

Трюки языка C#

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

ИМХО, вместо того, чтобы вкручивать собеседникам мозги насчет заумной семантики event’ов и делегатов или же спрашивать когда написание new IEntity() легально, можно задать вопрос попроще – например “приведите пример необычного поведения или использования языка C#”. Вот несколько примеров, которые пришли в голову в качестве возможных ответов.



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

Интегрируемся с Twitter

Время на прочтение6 мин
Количество просмотров2.5K
Давайте сначала обозначим, что такое Twitter.

Twitter – это бесплатный интернет-сервис, представляющий собой систему микроблогов, позволяющий пользователям отправлять короткие текстовые заметки (до 140 символов), используя веб-интерфейс, SMS, службы мгновенных сообщений или сторонние программы-клиенты (http://ru.wikipedia.org).

Второй вопрос, а зачем он нужен вообще? Просто общаться с друзьями? Это как вариант, но все таки существуют более удобные сервисы для обмена сообщениями. Скорее всего для публикацией и слежением за новостями (как личные, так и публичные).

Итак, если у вас есть некий интернет магазин, или сайт компании, на котором вы публикуете новости, то можно создать и twitter аккаунт, для того, чтобы дублировать туда информацию о выходе новых публикаций на сайте (как новости, так и поступление новой продукции), или вы можете прикрутить к своему блогу возможность публиковать в твиттере информацию о поступлении новых топиков (есть готовые сервисы, как http://twittsync.com/, работает на Microsoft Azure). Так же можно использовать твиттер “не по назначению” – вы можете создать некий пустой аккаунт, который будет публиковать, к примеру, состояние вашего компьютера, через Direct Message на ваш аккаунт или просто к себе на главную – один из примеров: ваш провайдер требует деньги за белый IP адрес, в противном случае он назначает вам адрес динамически, и каждые 24 часа вас отрубает (это для тех, кто использует роутеры) и вы хотите в любое время (например, с работы) узнавать какой у вас IP адрес для того чтобы зайти на свой домашний компьютер удаленно.

Следующий вопрос, сложно ли это сделать?

Легко! Можно пойти немного по более сложному пути и изучать TwitterAPI самому, тогда вам ни от чего не нужно будет зависеть, для начала тогда нужно воспользоваться статьей – Michael C. Kennedy – Building a Twitter Application in .NET, путь попроще – использовать готовое решение LINQ to Twitter (я им и воспользуюсь).

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

Обзор ASP.NET и Windows Forms компонентов

Время на прочтение3 мин
Количество просмотров16K
Предлагаю вашему вниманию обзор платных и бесплатных компонентов для разработки ASP.NET и Windows Forms приложений.

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

Программирование по контракту в .NET Framework 4

Время на прочтение9 мин
Количество просмотров9.5K
Столкнувшись с проблемой смены работы и желания работать разработчиком в хорошей конторе, понял, что мне не хватает знаний в области архитектуры, проектирования, ООП и прочих, не специфичных для платформы или языка вещах. Источники получения информации, кроме личного опыта, стандартные – книги и Интернет.

К тому времени были прочитаны книги Фаулера о рефакторинге и книга GoF. Эти книги многое мне дали и были очень полезными, но хотелось чего-то более основополагающего об ООП. Поискав по форумам, я нашел несколько книг, которые меня заинтересовали:
Бертран Мейер «Объектно-ориентированное конструирование программных систем»
Гради Буч, Объектно-ориентированный анализ и проектирование
Барбара Лисков. Использование абстракций и спецификаций при разработке программ

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

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

PHP Toolkit для ADO.NET Data Services — устраняем грани технологий: PHP + .NET

Время на прочтение2 мин
Количество просмотров1.3K
Microsoft Interoperability team объявила о выходе нового проекта, который является мостом между PHP и .NET и еще больше стирает грани технологий. Этот проект позволяет разработчикам на PHP еще более проще обращаться и использовать всю мощь сервисов .NET на основе ADO.NET Data Services.
Читать дальше →

Есть возможность выиграть персональную лицензию на R#

Время на прочтение2 мин
Количество просмотров519
David Ridgway в блогах web2asp.net объявил конкурс с названием COOL SNIPPETS. Приз – пользовательская лицензия на ReSharper.

Что такое snippet (не знаю как назвать его нормально по-русски)? На хабре уже были познавательные статьи на этот счет — Что такое Visual Studio.NET snippets? Часть первая. и Часть вторая. Я так пользуюсь только одним – при разработки программ на WPF для создания DependencyPropertypropdp (об этом я писал как-то в своем блоге). Тот, кто знает сколько кода нужно написать для каждого DependencyProperty, понимает насколько облегчает жизнь данный snippet. Но вот о каких то еще snippet’ах я никогда не задумывался и никаких больше не использовал. А так как лицензия на R# у меня уже есть, то рассказать о данном конкурсе мне не жалко ;) (на самом деле для участвующих, наоборот, полезнее рассказать о данном конкурсе, чтобы повысить себе шанс на выигрыш, о чем ниже). Главное, поделитесь snippet’ами, которые упрощают вам разработку, после того, конечно же, как вы отправите его на конкурс – с общественностью :).
Читать дальше →

Потоки в .NET. Часть 1

Время на прочтение4 мин
Количество просмотров14K
Этот топик дает начальные сведения об использовании потоков на платфоре .NET. Это мой первый пост на Хабре, поэтому не судите очень строго. Также хотелось бы услышать конструктивную критику о том, как можно улучшить материал.
Читать далее

Динамическая компиляция кода в C#

Время на прочтение5 мин
Количество просмотров33K
Использовать компилятор из кода C# достаточно просто. А вот зачем – это другой вопрос :).

Hello World


Напишем первый простой пример. Создаем консольное приложение и напишем следующий код:
using System;<br>using System.CodeDom.Compiler;<br>using System.Collections.Generic;<br>using Microsoft.CSharp;<br><br>namespace ConsoleCompiler<br>{<br>  internal class Program<br>  {<br>    private static void Main(string[] args)<br>    {<br>      // Source code для компиляции<br>      string source =<br>      @"<br>namespace Foo<br>{<br>  public class Bar<br>  {<br>    static void Main(string[] args)<br>    {<br>      Bar.SayHello();<br>    }<br><br>    public static void SayHello()<br>    {<br>      System.Console.WriteLine(""Hello World"");<br>    }<br>  }<br>}<br>      ";<br><br>      // Настройки компиляции<br>      Dictionary<string, string> providerOptions = new Dictionary<string, string><br>        {<br>          {"CompilerVersion", "v3.5"}<br>        };<br>      CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions);<br><br>      CompilerParameters compilerParams = new CompilerParameters<br>        {OutputAssembly = "D:\\Foo.EXE", GenerateExecutable = true};<br><br>      // Компиляция<br>      CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source);<br><br>      // Выводим информацию об ошибках<br>      Console.WriteLine("Number of Errors: {0}", results.Errors.Count);<br>      foreach (CompilerError err in results.Errors)<br>      {<br>        Console.WriteLine("ERROR {0}", err.ErrorText);<br>      }<br>    }<br>  }<br>}<br><br>* This source code was highlighted with Source Code Highlighter.

Запускаем и проверяем:
First Sample
Первое, на что стоит обратить внимание – это использование двух пространств имен (namespace):
  • Microsoft.CSharp
  • System.CodeDom.Compiler
В данных классах и содержится ключ к возможности компиляции. В нашем примере мы указываем что компилировать будем под .NET Framework 3.5, а так же указываем что мы хотим получить на выходе – Foo.exe, с возможностью запуска данного приложения.
Читать дальше →

Ошибки LINQ to SQL на сайтах при нагрузке (> 30 пользователей)

Время на прочтение3 мин
Количество просмотров2.2K
Совсем недавно начал использовать LINQ to SQL и при нагрузках на сайт стал замечать такого рода ошибки,
при чем появляются в стиле корейского Random-а:

вариант 1) InvalidCastException
вариант 2) DataReader is closed
вариант 3) SQL Server также генерирует ошибку связаную с MARS и рвет соединение
Читать дальше →

ASP.NET MVC: модульное тестирование маршрутов

Время на прочтение4 мин
Количество просмотров4.5K
imageМодульное тестирование (unit test) очень важная часть современной разработки программного обеспечения. При тестировании web-приложений разработчики стараются охватить все аспекты работы приложения от получения запроса до выдачи результата. При разработке проектов с помощью ASP.NET MVC одним из таких моментов является механизм маршрутизации. Тестирование маршрутов обычно приносило немало головной боли, заставляя разработчика писать много сопутствующего кода. В этой заметке я покажу как используя пару инструментов можно упростить тестирование маршрутов до минимума.
Читать дальше →

Nemerle и спутник, или ФП для самых маленьких

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

В последнее время на Хабре зачастило упоминание о Nemerle. Хотите узнать, что это такое и как его едят, а вернее — как с его помощью едят (задачки)?

Попробую показать на простом примере, но для этого вам придется
принести свой мозг в жертву богу Nemerle

Опыт использования VSTO для PowerPoint 2007

Время на прочтение6 мин
Количество просмотров1.6K
Я делаю много презентаций, и часто нужно показать код «по частям», то есть показать ход мысли в процессе последовательного написния кода. К сожалению, PowerPoint не настроен для таких целей. Поэтому я решил написать расширение для PowerPoint 2007 которое автогенерировало бы последовательность слайдов с «прогрессивной разверткой» кода и комментариев. Собственно об этом и будет рассказ.
Читать дальше →

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

ASP.NET MVC — «прячем» Action

Время на прочтение3 мин
Количество просмотров3.3K
При активном использовании функции jQuery $.ajax в ASP.NET MVC приложении может возникнуть проблема — юзер может захотеть стукнуться к Action напрямую, вводя адрес в строку браузера. С одной стороны, ничего страшного в этом нет, но желание «спрятать» Action может возникнуть. Предлагаю вот такой легкий способ решения такой проблемы, разумеется, без претензии на оригинальность и мегамонстрячество :)
Чуть-чуть кода

SQLite портирован на .NET

Время на прочтение1 мин
Количество просмотров2.8K
Размер бинарника 528KB против 506KB оригинального. Неплохо.

Производительность пока не впечатляет:

Test C#-SQLite SQLite
Insert 300K 1300K
Select 1500K 8450K
Update 60K 300K
Delete 250K 700K

Остается надеяться на то, что отказ от P/Invoke и последующие оптимизации сделают своё дело.
Следим за проектом и изучаем его на Google Code
code.google.com/p/csharp-sqlite

Рисуем pie график

Время на прочтение3 мин
Количество просмотров7.5K
Как-то понадобилось добавить в проект симпатичный 3-d pie график.
Пока толпа решала на какой компонент потратить денежку, нарисовал вот такой вот график:

image

Кому надо, делюсь кодом прототипа, он минимален:

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

Новые атрибуты в .NET 4

Время на прочтение2 мин
Количество просмотров742
Представляю вам два новых атрибута, которые улучшат продуктивность, за счет уменьшения объема кода:
  • [Optional]
  • [DefaultParameterValue]

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

С# сейчас гораздо лучше, чем Java

Время на прочтение3 мин
Количество просмотров21K
Я сейчас изучаю C#. Мой клиент организовал новое хранилище данных, а клиентское приложение будет на Windows. Как новоиспеченному консультанту, так же не помешает опыт в .NET/C#, даже если я предпочитаю разрабатывать на любой платформе, кроме Windows… Как консультант, я должен заботится о получении контрактов в будущем. Если для этого следует использовать и разрабатывать под Windows – я буду это делать, даже дома.
Читать дальше →

Изучение ASP.NET+ADO.NET+Silverlight

Время на прочтение3 мин
Количество просмотров12K
Совсем недавно я начал работу над одним проектом, подразумевающим создание веб-сервиса с удобным графическим интерфейсом. В то время я обладал лишь достаточно базисными знаниями языка C# и навыками в разработке Windows-приложений на .NET технологиях. Именно поэтому я решил тогда построить веб-приложения на технологиях ASP.NET, ADO.NET (сервис предполагает активное взаимодействие с БД) и Silverlight.
Прошло всего несколько недель, и сервис готов больше, чем на половину. Не могу сказать, что знаю о вышеуказанных технологиях всё, но вполне достаточно :) Собственно мой топик сейчас — это рассказ о том, как, на мой взгляд, следует учить эти технологии и что читать. Фактически я написал то, что мне очень не хватало в свое время — практически план действий. Я нисколько не претендую на звание профессионала в указанных отраслях, просто хотелось бы дать несколько советов новичкам и просто начинающим. Итак, начнем.
Читать дальше →

Вышел ASP.NET MVC V2 Preview 1 — разбор полетов

Время на прочтение5 мин
Количество просмотров1.2K
imageНа днях MVC 2 Preview 1 стал доступен широкой публике. Этот релиз фреймворка несет в себе весьма значительные нововведения, которые я постараюсь кратко описать в этой заметке. Прежде всего, необходимо заметить, что как и в случае с первой версией, статус “Preview 1” – означает техническую демонстрацию изменений и нового функционала. Ожидается, что заинтересованное сообщество разработчиков протестирует и оценит этот релиз и на основе отзывов в MVC Framework  будут внесены изменения для выпуска Preview 2 и так далее, до финального релиза второй версии. Другими словами, данный релиз не предназначен для использования, что называется, “в production”. Весьма вероятно, что последующие релизы могут содержать более или менее значительные изменения, из-за которых, может быть нарушена совместимость проекта написанного для preview 1 с выпусками preview 2 и так далее.
Читать дальше →

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