Search
Write a publication
Pull to refresh
-1
0
FanKiLL @FanKiLL

User

Send message

Async в C#

Reading time4 min
Views96K
Продолжение по ссылкам: часть II и часть III.

На PDC2010 Хейсберг объявил, что следующая версия C# будет поддерживать примитивы для удобной организации асинхронных вычислений, кроме анонса была представлена CTP версия расширения для студии (скачать), которая позволяет попробовать улучшенное асинхронное программирование уже сейчас.

Улучшение создано, чтобы облегчить комбинацию асинхронных операций, а так же для того, чтобы асинхронных код выглядел максимально приближенно к синхронному. Учитывая, что Silverlight версия .NET Framework содержит только асинхронную модель для работы с сетью, данное улучшение очень уместно.

Не смотря на то, что упрошенное асинхронное программирование является нововведением в C#, сам подход нельзя назвать инновационным, так как реализация async на основе монад есть в Haskell, F# и Nemerle. На самом деле поддержка языком монад позволяет реализовать даже большее, поэтому я был немного удивлен, когда посмотрел презентацию Хейсберга и понял, что в язык был встроен только частный случай.
Под катом описание async и await

Пишем себе немного OpenID-авторизации

Reading time10 min
Views9.8K
image

Взгляд в будущее


    В последнее время всякие социальные сети и вообще сервисы-лидеры интернета по посещаемости и количеству аккаунтов завели очень неплохую, на мой взгляд, привычку — предоставление уникальных OpenID-идентификаторов для пользователей, дабы с их использованием можно было зайти на сторонний сайт. Кроме того, параллельно развивается очень похожая, но все-таки не совсем производная технология OAuth, которая появилась на свет благодаря стараниям создателей небезызвестного Twitter и, цитируя википедию, «позволяет предоставить третьей стороне доступ к защищенным ресурсам пользователя, без необходимости передавать ей (третьей стороне) логин и пароль».
    Лично меня такая тенденция очень радует и, более того, я почти уверен, что за подобной технологией будущее. В частности, в будущем обязательно появятся новые мэшапы для агрегирования информации с кучи сайтов (в частности, хочется вспомнить очень хороший, но несправедливо забытый сервис Yahoo Pipes, который так и не смог покорить сердца и умы просто потому, что его время тогда еще не пришло. Возможно, все еще впереди), а именно такой «форм-фактор» требует логина на кучу сервисов сразу.
Читать дальше →

Книга MEF

Reading time7 min
Views37K
imageЭтой статьей я начинаю цикл, цель которого – создание наиболее полного руководства по Managed Extensibility Framework (MEF) на русском языке. Результатом цикла, в моих планах, станет создание бесплатной электронной книги о MEF. Если у вас есть соображения или предложения по этому поводу – дайте мне знать в комментариях. Я надеюсь, что совместными усилиями мы можем создать отличное руководство.

Эта статья составлена по материалам моих докладов про MEF на разных встречах, в том числе на конференции DevConf.

Я ищу соавторов, критиков, просто людей, которые хотят помочь, в том числе с версткой документа.

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

Перевод Azure Services Platform Девида Чеппела 1 часть

Reading time15 min
Views3.2K
Вторая часть перевода

Обзор платформы.


Использование компьютеров в облаке часто может быть очень неплохой идеей. Вместо того, чтобы покупать и обслуживать свое собственное железо, почему бы не использовать массу серверов, доступных и предлагаемых сегодня через интернет? Для некоторых приложений и код, и данные – и то, и другое — может жить в облаке, где кто-то другой поддерживает и обслуживает используемые ими системы. В других случаях, приложения, которые работают внутри организации — локальные (on-premises) приложения, могут хранить свои данные в облаке или использовать другую инфраструктуру из облака. Приложения, которые работаю на десктопах или мобильных устройствах могут использовать сервисы в облаке для синхронизации данных между разными системами или в каких-то других целях.

В любом случае, работает ли приложение само в облаке или использует сервисы, предоставленные облаком, либо оба варианта, нужно что-то типа платформы для таких приложений. Смотря шире, под платформой для приложений можно понимать все, что предоставляет разработчику службы для создания приложений. Для примера, в локальном мире Windows это включает такие технологии как .NET Framework, SQL Server и т.д. Чтобы приложения могли использовать облако должна существовать облачная платформа для приложений. И поскольку есть много разных применений облака для приложений, разные виды облачных платформ полезны в разных ситуациях.

Microsoft Azure Service Platform — это группа облачных технологий, каждая из которых предоставляет определенный набор сервисов для разработчиков.
Читать дальше →

.NET Interop на примере работы с сокетами

Reading time8 min
Views9.8K
Хватит мне уже гнать про теорию, вы мне практику давайте, практику!


У нас есть множество технологий. Одни неимоверно быстры, другие неимоверно удобны. Одни позволяют летать со скоростью света, другие позволяют разрабатывать со скоростью света.

Споры насчёт того, какой же подход лучше, утихают редко. Сейчас я покажу, как можно скрестить ежа с ужом. У нас есть .NET, которым можно быстро делать и есть Native, который может быстро делать.

В образовательных целях мы будем скрещивать эти два направления. У статьи есть ещё одна цель. В её основе лежит написанная мною и Arwyl'ом программа под названием DuSter. Эта программа представляет собой сервер-пустышку, который позволяет тестировать сетевые программы. Сервер очень прост в использовании, достаточно гибко настраивается, поддерживает файлы описания протоколов, которые позволяют более-менее автоматизировать тестирования работы любых протоколов. Я занимался разработкой сетевого уровня, мой друг — бизнес-логикой и парсингом протоколов. Получилось что-то неимоверно хорошо вылизанное и приятное. Мы гордимся своей программой, и хотим предоставить её сорцы миру, для некоммерческого использования.
И так, приступаем

Free Silverlight 4 Training Kit

Reading time1 min
Views700
На Chanel 9 объявили о бесплатной раздаче учебного комплекта для Silverlight 4 (на английском). Учебный комплект включает в себя техническое описание и курс лабораторных работ раскрывающий новые возможности Silverlight 4 и направленный на построение бизнес-приложений.

В описании сказано, что курс включает в себя восемь модулей с практическими заданиями и поясняющим видео. В курсе рассказывается о повышении уровня доверия внутри браузера, о новом контроле RichTextBox, неявном применении стилей, работе с веб-камерой, о возможностях «drag and drop» и «multi touch», валидации, аутентификации, о MEF, WCF RIA Services, о работе с правой кнопкой мыши и многом другом.

Статья на Chanel 9: channel9.msdn.com/learn/courses/Silverlight4
Страница загрузки: go.microsoft.com/?linkid=9709693

Geotagging — привязка фотографий к карте

Reading time9 min
Views39K
Уверен что про geotagging слышало подавляющее большинство хабраюзеров, особенно те кто интересуется фотографией. Для тех же, кто все таки не слышал поясню — в двух словах geotagging есть внедрение Exif тегов содержащих информацию с координатами GPS в фотографии с последующей привязкой фотографий к карте.

Возможность просмотра привязанных к картам фотографий предоставляет большинство современных фото-хостингов — PicasaWeb, Flickr, Яндекс-Фотки и прочие, да и десктопные программы подтягиваются, например Picasa.

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

Шаблоны отображения и редактирования данных в ASP.NET MVC 2

Reading time26 min
Views32K

Перевод серии статей посвящённых шаблонам отображения и редактирования.



  1. Введение в шаблоны. (Оригинал)
  2. Метаданные в шаблонах. (Оригинал)
  3. Встроенные шаблоны. (Оригинал)
  4. Создание собственных шаблонов. (Оригинал)
  5. Мастер-шаблоны. (Оригинал)


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

MVC 2: Полное руководство по локализации

Reading time14 min
Views18K
imageВ данной статье мы рассмотрим все аспекты локализации веб приложения основанного на ASP.NET MVC. Я использую последнюю доступную MVC 2 RC 2 версию на время написания данного топика.

До того, как мы начнем я хотел бы поблагодарить команду MVC, отличная работа ребята, я наслаждаюсь процессом написания веб-приложений, когда использую данный фреймворк. Я искал фреймворк такого типа, после небольшого опыта работы с Ruby on Rails.

Мы рассмотрим следующие проблемы:
  1. Валидация представлений
  2. Простой механизм переключения культур
  3. Локализация сообщений валидации модели
  4. Локализация атрибута DisplayName
  5. Кэш и локализация
Для работы вам понадобится Visual Studio 2008 Express и ASP.NET MVC 2 RC2, а также создать новый MVC 2 веб-проект.
Читать дальше →

jQuery закладки и Partial View, используем AJAX

Reading time3 min
Views11K
asp.net mvc 2В моем текущем проекте, мне понадобилось использовать элемент управления Tab, но данные слишком тяжелы для первой загрузки страницы. К счастью jQuery Tab предоставляет нужную функциональность. Тем не менее, я должен был найти способ, как легко организовать данные закладок со стороны сервера. ASP.NET MVC предоставляет удобный механизм — частичные представления (Partial View).
Читать дальше →

Программа из одного exe

Reading time4 min
Views43K
Как правило, при написании .NET программ используются не только классы из .NET BCL, но и сторонние библиотеки. Во время выполнения программы все используемые библиотеки должны быть найдены. Для этого зависимые dll кладут в одну папку с exe файлом.

Однако существуют программы, использующие сторонние библиотеки, но при этом состоящие из одного единственного файла. Все утилиты от SysInternals, а также любимый мной LINQPad представляют из себя один файл в котором содержится все, что требуется для работы. Пользоваться такими утилитами одно удовольствие — они сразу готовы к использованию, их удобно передавать и хранить.

В статье рассказывается, как создавать такие автономные программы из одного файла. Разобран пример как со сжатием зашить библиотеку AutoMapper в программу и как ее потом достать и использовать.

Программа из одного EXE

Материалы продвинутого уровня по Питону

Reading time5 min
Views46K
PythonВ мире все примерно распределяется в соответствии с принципом Паретто. Меньшая часть — богатые, большая часть — бедные (читающий, ты входишь в золотой миллиард). Тоже касается и материалов о программировании. Порой очень сложно найти хоть что-нибудь не начального уровня.

После прочтения Dive into Python или подобной ей и ознакомления с документацией возникает вопрос, а что читать дальше? Можно обратиться к списку книг на python.org. Там есть раздел Advanced Books, но в нем всего лишь 6 книг (седьмая не выходила), и только одну я бы назвал по-настоящему стоящей.

К счастью, у Питона есть очень подробная и качественная документация. Но даже в ней многие темы либо только поверхностно затронуты, либо их очень сложно найти (потому что документация большая, и если не знаешь, куда смотреть, не найдешь).

Ниже собраны сложные материлы про Питон, его устройство и возможности. Все на английском (грех, не знать технический английский). Про Dive into Python я слукавил. Большинство приведенных материалов требуют хорошее знание Питона и наличие опыта программирования на нем.

Подробнее

Создатель Ruby on Rails Девид Хенссон из 37signals о секретах прибыльного стартапа

Reading time2 min
Views1.2K
imageНедавно на Хабре уже обсуждалось аудио/видео Девида Хенссона (David Heinemeier Hansson) для Стенфорда на тему стартапов.

В данном же материале предлагается обратить внимание на его видео и презентацию со Startup School'08, не потерявшие своей актуальности и сейчас, под названием: The A secret to making money online.
Читать дальше →

HTML 5. Работа с Web SQL базой данных

Reading time3 min
Views175K
В HTML 5 есть много новых возможностей, которые позволяют web разработчикам создавать более мощные и насыщенные приложения. К этим возможностям относятся и новые способы хранения данных на клиенте, такие как web storage(поддерживается в IE8) и web SQL database.

При этом если web storage ориентирован на хранение пар ключ-значение, то в случае с web SQL database у нас есть полноценный sqlite(во всех текущих реализациях применяется именно этот движок баз данных, что является проблемой при стандартизации).

Далее я расскажу, как работать с web SQL database. При этом примеры естественно будут на JavaScript. Кроме того, стоит отметить, что с поддержкой браузерами всего этого хозяйства дела обстоят, не очень хорошо, но всё постепенно меняется к лучшему и, скажем, в Opera 10.50 поддержка будет, а браузерах на движке WebKit она уже есть. Более подробно про то, какой браузер, что поддерживает можно узнать, пройдя по ссылке.

Соединение с базой данных.


Подсоединиться к базе данных очень просто:

db = openDatabase("ToDo", "0.1", "A list of to do items.", 200000);
Читать дальше →

35 свежих и полезных jQuery плагинов

Reading time6 min
Views46K
Быстрый и мощный jQuery может помочь дизайнерам и разработчикам в создании прекрасных интерактивных сайтов, которые будут привлекательными и совместимыми с большинством из браузеров. Ваш сайт будет и интересным и развлекательным. Навигация, галереи и слайдшоу являются теми компонентами, которые могут блистать на вашем сайте.

Данная статья содержит 35 полезных и свежих jQuery плагинов сфокусированных на навигации, галереях, слайдшоу, календарях, табуляции и т.д., которые уменьшат время и требуемые усилия для увеличения количества посетителей вашего сайта.
Читаем дальше...

Как сделать сайт более iPhone-совместимым за 5 шагов

Reading time2 min
Views55K
Тот факт, что iPhone предлагает наиболее развитый мобильный браузер среди мобильных платформ, пожалуй, ни у кого не вызовет сомнений. Однако не все знают, что довольно небольшими усилиями можно сайт сделать еще более дружественным к тем, кто смотрят его на iPhone или iPod Touch.

Ниже предлагаются простые 5 шагов, с которых можно начать, на примере сайта WHOIS Digger.

Шаг 1. Аналог favicon.ico

Когда пользователь создает ссылку на ваш сайт в виде иконки в SpringBoard, iPhone автоматически формирует картинку из скриншота страницы. В результате почти всегда получается неразборчивая каша, которая на гордое звание «иконки для iPhone» никак не тянет. Пропишите этот тег в заголовке страницы:

<link rel="apple-touch-icon" href="res/iphone_icon.png" />

и добавьте соответствующую картинку res/iphone_icon.png размером 57х57 пикселов. iPhone сам добавит скругленные углы и полукруглый блик, сделав вашу иконку похожей на остальные.

Вот так выглядит исходная картинка и иконка на рабочем столе iPhone:


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

Перевод Azure Services Platform Девида Чеппела 2 часть

Reading time18 min
Views3K
Первая часть перевода

Детальный взгляд на технологии.


Получить общее представление о Azure Service Platform это важный первый шаг, однако, более глубокее понимание каждой из технологий тоже необходимо. В этом разделе каждый из членов семьи Azure рассматривается немного более детально.
Читать дальше →

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

Reading time3 min
Views1.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 есть в следующих проектах (сами проекты пока не смотрел):

Information

Rating
Does not participate
Location
Хайфа, Хайфа, Израиль
Date of birth
Registered
Activity