Denis Gladkikh
Russian   |  English
Страница  1  2  3  4  5  6  7  8  9  10  ...  

Немного кода, небольшой рефакторинг

Изучал тут как-то примеры книги Professional Twitter Development: With Examples in .NET 3.5, хотел разобраться как работает эта самая OAuth авторизация для твиттера. Раньше у меня на сайте было немного действий с твиттером, подгружались мой твитты, хранились, отображались, но потом твиттер что-то поменял в авторизации, вроде разрешил только OAuth, а в тот момент я что-то не шибко разобрался с этим OAuth, да и времени не было, хотя вроде еще тогда LinqToTwitter ее поддерживал (а я использовал именно эту библиотеку). В общем-то, просто в тот момент подумал, что тема OAuth авторизации интересна, и нужно бы посмотреть как она реализована в деталях попозже. Вот и набрел я тут недавно на книгу Professional Twitter Development: With Examples in .NET 3.5, точнее только на ее примеры, решил поковыряться. Код там был не из простых, и я просто тупо стал рефакторить его, чтобы разобрать что и как работает. Вот, например, одно из превращений, которое я уже правда публиковал в твиттере давно (и может быть вы уже видели):



Реализуем сами простой IoC контейнер

Думаю, что даже уже начинающий разработчик должен быть знаком с понятием Inversion of Control (сокращают как IoC). Любой проект сейчас начинается с выбора фреймворка, при помощи которого будет реализован принцип внедрения зависимостей. Если взять русскую википедию, то там определение для IoC выглядит следующим образом:

Инверсия управления (Inversion of Control, IoC) — важный принцип объектно-ориентированного программирования, используемый для уменьшения связанности в компьютерных программах и входящий в пятерку важнейших принципов SOLID.

IoC решает очень простую, но и очень важную задачу, он уменьшает зависимость между компонентами системы. В случае использования, например, внешних библиотек вы делаете так, что ваше приложение зависит только от некоторого интерфейса (абстракции), сама же реализация скрыта, и в любой момент может быть заменена другой. Простой пример: нравится log4net, но не уверены, что он останется с вами навсегда; делаете свой интерфейс ILogger, во всех классах используете именно эту абстракцию, получая ее из IoC контейнера, реализуете класс, который использует log4net и регистрируете его для этой абстракции в IoC, и в случае перехода на другую библиотеку вам достаточно поменять реализацию ILogger и просто регистрировать в IoC именно теперь новую реализацию использующую что-то другое.

Для .NET платформы, как и для любых других платформ, есть огромное разнообразие библиотек, которые можно использовать в проектах: Unity, StructureMap, Ninject, Castle Windsor. Это только часть, которую я вспомнил на данный момент, но есть и еще немалое количество, помню даже кто-то из знакомых писал свой. Для бизнес проектов, ну и для проектов, бинарники которых вижу только я, мне хватает этих библиотек, да более того мне хватает только Unity. Но вот, если хочется написать какую-нибудь утилиту или приложение для общественности, либо библиотеку, то написав приложение в 100 килобайт тянут за ним еще по 300 килобайт библиотеки для записи логов и 300 библиотеки, реализующей для тебя IoC немного дико. И дико иметь привязку на какую-то специфичную реализацию IoC, особенно, если вы распространяете библиотеку, ведь ваши пользователи могут держать в привычке использовать совершенно другую реализации IoC. А в случае приложения дело даже не в размере, а в том, что у вас вместо всего одного exe файла будет поставляться еще гора каких-то непонятных библиотек (все зависит конечно еще от того, как будете распространять свое приложение). Есть, конечно, еще и простое решение, можно объединить все ваши бинарники приложения при помощи утилиты ILMerge.exe в один exe файл. Ну а все-таки, если дело в размере? Хочется, чтобы приложение было действительно очень небольшим в размерах.



Lenovo Thinkpad w510–Настоящий зверь для программиста

Участвовал с 28 февраля по 2 марта на MVP саммите в Сиэтле. Там же забрал свой новый ноутбук Lenovo Thinkpad w510, который заказал еще в январе с официального сайта Lenovo на знакомых в Редмонде. Заказывал во время новогодних каникул, потому наткнулся на огромные скидки.

Если сравнить по быстрому, что было и что стало, то вот то, что было:

Был у меня Lenovo Ideapad Y430-2 (P7350 2.0GHz, 4Gb DDR2 667MHz, 256Mb, 9300M GS). И вот, что стало:

w510_ex



Обновляем сайт до HTML 5. Часть 1.

Недавно я выступал на нашей Ярославской User Group с докладом о HTML5, не потому что, я в этом профессионал, а просто решил поведать, раз недавно читал книгу о HTML5 и даже перевел свой сайт на HTML5, а еще потому, что никто у нас в Ярославле так и не собрался сделать доклад про HTML5. Посмотреть и скачать презентацию доклада можно с SkyDrive. Мой доклад был небольшой реферативной работой на книгу Html 5: Up and Running, либо DIVE INTO HTML5 (что на самом деле одно и тоже). Сегодня же я хочу сделать небольшую памятку о том, как перевести сайт с HTML4 на HTML5, основанную на докладе и книгах (опять же реферативная работа) для дальнейшего пользования мной же, ну и может быть кому-нибудь тоже будет полезно.



Проверяем наличие подписчиков у событий при помощи Reflection

Передо мной встала задача, нужно было бы собрать все события объекта и подписаться на них (подписать определенный метод), только в том случае, если на это событие не подписан кто-то еще. Я могу даже больше сказать, делал я это для классов-оберток, которые генерирует Visual Studio на Add Reference Service…. Используем мы их по стандартному, как и все, наверное. Используем в коде не сами классы-обертки, которые генерирует Visual Studio, а используем свои реализации, которые нам предоставляют возможность тестировать наши модели, подставляя Mock и Stub объекты вместо самих реализаций. Давайте лучше покажу на примере.

Заголовок для этой заметки достаточно сложно было придумать. Проверка наличия подписчиков – это все-таки малая сердцевина того, что я тут описываю, но я думаю это просто самая интересная часть. В целом, я тут описываю вариант обработки результатов от методов сервисов в Silverlight приложении.



Публикуем сайт с SQL Server Compact Edition 4.0

Меня, честно, даже обрадовало то, что можно теперь разрабатывать сайты с использованием SQL Server Compact Edition 4.0. Отдельная База Данных иногда бывает провокатором проблем и ошибок: у хостера ваш сосед по БД может сильно перезагрузить сервер БД, и у вас начнется что-то отваливаться (либо хостер может перегрузить сервер БД слишком большим количеством баз данных). С SQL Server Compact Edition 4.0 наш сайт уже не зависит от внешней БД, она у нас локальная, крутится вместе с нашим приложением. Уж очень удобно забирать всегда последнюю версию файла базы данных, легко обновлять – нужно просто скопировать файл. В общем, на момент выхода статьи мой сайт будет крутиться на SQL Server Compact Edition 4.0 уже как месяц (проблем не было никаких). Рекомендую задуматься, если у вас сайт, вроде блога, небольшого онлайн магазина, о том, чтобы перевести (или разрабатывать новое) с использованием SQL Server CE 4.



Обновляем приложение с MVC 2 до MVC 3

Уже год мой сайт (блог) живет на самописном движке, который я сделал при помощи ASP.NET MVC 2. Конечно же я мог пользоваться бесплатными площадками для блогов, но мне пока интересно развиваться по многим направлениям. И если моя основная специальность сейчас Silverlight/WPF, то я все равно стараюсь не забыть про старый добрый веб, без него никуда в нынешнее время. Ну и нужно быть на гребне волны, потому я и решил что пора бы проапгрейдить свой сайт с MVC2 до MVC3. Зачем? А просто, чтобы было. Чтобы в будущем, когда захочется что-то допилить или доделать, а у меня уже была последняя версия, и я мог использовать последние фичи технологии.



Silverlight: Байндинг коллекции элементов на TabControl.ItemsSource

Раньше я как-то обходился без подобного в Silverlight. Всегда размещал TabItem в XAML коде, а не байндил коллекцию объектов, и при помощи DataTemplate настраивал вид того, что находится в TabItem.Content. Просто не было необходимости байндить коллекцию моих объектов (неких BindingModel) на TabControl.ItemsSource, а тут, буквально недавно, захотелось немного отрефакторить код, так как коллекция табов все росла, и управлять ею уже было сложно, и как раз придумал как это возможно сделать через описанный выше способ. Сказано – сделано. Потратил пару часов, переписал код, запускаю, и обнаруживаю такой вот exception:

System.ArgumentException: Unable to cast object of type 'SilverlightTabControl.Foo' to type 'System.Windows.Controls.TabItem'.

Быстро гуглю, нахожу на форумах Silverlight тему Databinding a TabControl (Я не одинок! Как показало более глубокое угугление, я совсем не одинок), а там

This is because currently TabControl doesn't override PrepareContainerForItemOverride, so it won't automatically wrap your data source in TabItems.

Ну и в качестве решения предлагается написать свой TabConverter. Microsoft, ну я точно помню, что в WPF байндинг на ItemsSource у TabControl’а работает прекрасно. Я это делал. Ладно, терпим, что в Silverlight контролах достаточно много багов, но тут-то просто ребята немного не доделали, а контрол зарелизили, да и сколько версий он уже живет? В реальности на первый взгляд нужно сделать 2 вещи:



071-506/070-506–“TS: Silverlight 4, Development” Passed

Посмотрел на сайте Prometric в разделе Candidate History наконец-то проверили бета экзамен по Silverlight 4, который я еще сдавал 23 октября прошлого года. Пока с сайта mcp.microsoft.com письмо не пришло с уведомлением об успешной сдаче экзамена, думаю, будет в ближайшие дни. Как писал Сергей Лутай в своем блоге, уже 3 дня назад стало возможным зарегистрироваться на этот экзамен 070-506 Silverlight 4 (бета экзамены имеют номер, начинающийся с 071, потом заменяется номер на 070).

Capture

Кто сдавал экзамен, думаю, так же могут посмотреть у себя в Candidate History информацию и обрадовать себя. Честно, на сколько я помню из экзамена, он был достаточно простым (правда помню я не многое), так что сдать должны все.

Если есть вопросы, готов ответить, но в рамках NDA, которую подписывает человек перед сдачей экзамена.



Как часто нужно публиковать окончательные версии продуктов?

Думаю, что многие знают про программу Calibre. Я ее использую для конвертации книг для своего Kindle 3 девайса, например, из fb2 в mobi. Не знаю, как часто вы пользуетесь этой программой, а я так один раз в месяц (ну может быть чуть-чуть чаще). Накапливается много рекомендаций о книгах, и я начинаю заливать их на Kindle. Еще важно учитывать мою небольшую гиковатость, если я вижу, что у какого-то ПО вышло обновление, то у меня просто все чешется, что нужно обязательно поставить, не важно есть ли там мне важные исправления или нет. Так вот, если вы знакомы с Calibre, то представляете, что первым делом при каждом запуске программы у меня начинает уже поддергиваться глаз, что опять обновление? Релизы выпускают каждую неделю.



Страница  1  2  3  4  5  6  7  8  9  10  ...