четверг, 15 декабря 2011 г.

Жизнь программиста :)


пятница, 3 июня 2011 г.

Хорошие статьи по WPF

Рекомендую почитать про WPF и шаблон MVVM:
 http://msdn.microsoft.com/ru-ru/magazine/cc785479.aspx
 http://msdn.microsoft.com/ru-ru/magazine/cc700358.aspx
 http://msdn.microsoft.com/ru-ru/magazine/cc785480.aspx
 http://msdn.microsoft.com/ru-ru/magazine/dd419663.aspx

среда, 25 мая 2011 г.

Настоящее понимание ViewState'а

http://habrahabr.ru/blogs/net/119537/

Непонимание ViewState'а ведет к...

  1. Потере важной информации
  2. Атакам на ViewState
  3. Плохой производительности — вплоть до ОТСУТСТВИЯ ПРОИЗВОДИТЕЛЬНОСТИ
  4. Плохой расширяемости — как много пользователей вы сможете обслужить, если каждый из них будет отправлять 50k с каждым запросом?
  5. Плохому дизайну вообще
  6. Головной боли, тошноте, головокружениям и необратимому искривлению формы надбровных дуг

Что делает ViewState?

Это список основных функций ViewState'а. Каждая из них служит определенной цели. Далее мы рассмотрим, как именно они этих целей достигают.
  1. Сохраняет данные элементов управления по ключу, как хэш-таблица
  2. Отслеживает изменения состояния ViewState'а
  3. Сериализирует и десериализирует сохраненные данные в скрытое поле на клиенте
  4. Автоматически восстанавливает данные на postback'ах


Еще более важно понимать, что ViewState НЕ делает.

Что не делает ViewState?

  1. Автоматически сохраняет состояние полей класса (скрытых, защищенных или открытых)
  2. Запоминает какую-либо информацию при загрузке страницы (только postback'и)
  3. Исключает необходимость загружать данные при каждом запросе
  4. Отвечает за загрузку данных, которые были отправлены на сервер, например введенных в текстовое поле (хотя ViewState и играет здесь важную роль)
  5. Варит вам кофе

пятница, 22 апреля 2011 г.

На работу и на волю :)


Список событий в GLOBAL.ASAX

Теория и практика MVC »

Список событий в GLOBAL.ASAX

пятница, 22 апреля 2011, 07:25 | Комментарии: 1 В этой небольшой памятке перечислены события, который можно перехватить используя методы, определяемые в файле global.asax.

Список событий в порядке из вызова

Чтобы не было путаницы в дальнейшем, определим чем аутентификация отличается от авторизации:
  • Аутентификация – идентификация личности пользователя (например по его имени и пароль).
  • Авторизация – определение прав на запрашиваемый пользователем ресурс (страницу, сервис).
Теперь рассмотрим вариант списка событий без их описания. При этом расположим их в порядке, соответствующем последовательности вызова.
01// запуск веб-приложения
02 
03protected void Application_Start(Object sender, EventArgs e);
04 
05// получение запроса
06 
07protected void Application_BeginRequest(Object sender, EventArgs e);
08protected void Application_AuthenticateRequest(Object sender, EventArgs e);
09protected void Application_AuthorizeRequest(Object sender, EventArgs e);
10protected void Application_ResolveRequestCache(Object sender, EventArgs e);
11 
12// начало сессии, один раз для каждого клиента
13 
14protected void Session_Start(Object sender, EventArgs e);
15 
16// обработка запроса
17 
18protected void Application_AcquireRequestState(Object sender, EventArgs e);
19protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e);
20protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e);
21protected void Application_ReleaseRequestState(Object sender, EventArgs e);
22protected void Application_UpdateRequestCache(Object sender, EventArgs e);
23protected void Application_EndRequest(Object sender, EventArgs e);
24 
25// конец запроса
26 
27// отправка ответа
28 
29protected void Application_PreSendRequestHeaders(Object sender, EventArgs e);
30protected void Application_PreSendRequestContent(Object sender, EventArgs e);
31 
32// конец сессии, один раз для каждого клиента
33 
34protected void Session_End(Object sender, EventArgs e);
35 
36// завершение работы веб-приложения
37 
38protected void Application_Disposed(Object sender, EventArgs e);
39protected void Application_End(Object sender, EventArgs e);
А теперь рассмотрим все эти события более подробно:
  • protected void Application_Start(Object sender, EventArgs e);
Вызывается единожды при создании экземпляра класса HttpApplication в момент обращения первого пользователя к нему. Позволяет создать глобальные объекты, доступные во всем приложении.
  • protected void Application_BeginRequest(Object sender, EventArgs e);
Вызывается первым каждый раз при получения нового запроса от пользователя.
  • protected void Application_AuthenticateRequest(Object sender, EventArgs e);
Вызывается после аутентификации пользователя (установления его виртуальной личности, включая статус "незарегистрированный пользователь"). Данный метод можно использовать для проведения дополнительных проверок его статуса.
  • protected void Application_AuthorizeRequest(Object sender, EventArgs e);
Вызывается после авторизации пользователя по отношению к запрашиваемому ресурсу. Т.е. указывает что у пользователя есть права на действие (как правило просмотр), которое он хочет выполнить. Также как и Application_AuthenticateRequest() можно использовать для дополнительных проверок.
  • protected void Application_ResolveRequestCache(Object sender, EventArgs e);
Вызывается при поиске в кэше готового результата для запроса. Позволяет модулям вернуть уже готовый ранее результат и не задействовать обработчики. Таким образом снижается нагрузка на сервер, на котором размещено веб-приложение.
  • protected void Session_Start(Object sender, EventArgs e);
Вызывается единожды для каждого клиента (посетителя) в начале его сессии.
  • protected void Application_AcquireRequestState(Object sender, EventArgs e);
Вызывается после того, как ядро ASP.NET получает текущий контекст (state) запроса (данные сессии).
  • protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e);
Вызывается перед обращением к обработчикам запроса (handlers).
  • protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e);
Вызывается после завершения работы обработчиков запроса (handlers).
  • protected void Application_ReleaseRequestState(Object sender, EventArgs e);
Вызывается после завершения всех обработчиков событий и сохранения контекста (state) запроса.
  • protected void Application_UpdateRequestCache(Object sender, EventArgs e);
Вызывается после завершения всех обработчиков событий. В данном методе модули имеют возможность сохранить необходимые данные в кэше. В дальнейшем они могут быть использованы при обработке  Application_ResolveRequestCache().
  • protected void Application_EndRequest(Object sender, EventArgs e);
Вызывается как последнее событие при завершении обработки запроса от пользователя.
  • protected void Application_PreSendRequestHeaders(Object sender, EventArgs e);
Вызывается перед отправкой заголовков ответа клиенту.
  • protected void Application_PreSendRequestContent(Object sender, EventArgs e);
Вызывается перед отправкой содержимого ответа (например HTML кода страницы) клиенту.
  • protected void Session_End(Object sender, EventArgs e);
Вызывается единожды для каждого клиента (посетителя) при завершении его сессии (закрытии или истечении времени таймаута).
  • protected void Application_Disposed(Object sender, EventArgs e);
Вызывается при завершении веб-приложения. Хорошо подходит для методов освобождения используемых ресурсов.
  • protected void Application_End(Object sender, EventArgs e);
Вызывается при уничтожении последнего экземпляр класса HttpApplication. Т.е. при истечении таймаута у последнего активного пользователя.
  • protected void Application_Error(Object sender, EventArgs e);
В данный метод передаются все необработанные исключения, возникшие в веб-приложении. Как правило используется для записи информации о них в журнал и уведомлений обслуживающего персонала.

Пример файла Global.asax со всеми перечисленными обработчиками

Приведенный ниже код может быть добавлен в ASP.NET или ASP.NET MVC приложение. В каждом приведенном методе используется вызов Debug.Write() из пространства имен System.Diagnostics для вывода уведомления в окно Output. Таком образом можно самостоятельно посмотреть на порядок вызова обработчиков событий (код взять из ASP.NET MVC приложения).
001namespace MvcApplication
002{
003    using System;
004    using System.Diagnostics;
005    using System.Web.Mvc;
006    using System.Web.Routing;
007 
008    // Note: For instructions on enabling IIS6 or IIS7 classic mode,
009    // visit http://go.microsoft.com/?LinkId=9394801
010 
011    public class MvcApplication : System.Web.HttpApplication
012    {
013        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
014        {
015            filters.Add(new HandleErrorAttribute());
016        }
017 
018        public static void RegisterRoutes(RouteCollection routes)
019        {
020            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
021 
022            routes.MapRoute(
023                "User", // Route name
024                "{controller}/{action}/{id}", // URL with parameters
025                new {
026                    controller = "UserProfiles",
027                    action = "Index",
028                    id = UrlParameter.Optional
029                } // Parameter defaults
030            );
031        }
032 
033        protected void Application_Init(Object sender, EventArgs e)
034        {
035            Debug.WriteLine("protected void Application_Init();");
036        }
037 
038        protected void Application_Start()
039        {
040            AreaRegistration.RegisterAllAreas();
041 
042            RegisterGlobalFilters(GlobalFilters.Filters);
043            RegisterRoutes(RouteTable.Routes);
044 
045            Debug.WriteLine("protected void Application_Start();");
046        }
047 
048        protected void Application_End(Object sender, EventArgs e)
049        {
050            Debug.WriteLine("protected void Application_End();");
051        }
052 
053        protected void Application_Disposed(Object sender, EventArgs e)
054        {
055            Debug.WriteLine("protected void Application_Disposed();");
056        }
057 
058        protected void Application_BeginRequest(Object sender, EventArgs e)
059        {
060            Debug.WriteLine("protected void Application_BeginRequest();");
061        }
062 
063        protected void Application_EndRequest(Object sender, EventArgs e)
064        {
065            Debug.WriteLine("protected void Application_EndRequest();");
066        }
067 
068        protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
069        {
070            Debug.WriteLine("protected void Application_PreRequestHandlerExecute();");
071        }
072 
073        protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e)
074        {
075            Debug.WriteLine("protected void Application_PostRequestHandlerExecute();");
076        }
077 
078        protected void Application_PreSendRequestHeaders(Object sender, EventArgs e)
079        {
080            Debug.WriteLine("protected void Application_PreSendRequestHeaders();");
081        }
082 
083        protected void Application_PreSendRequestContent(Object sender, EventArgs e)
084        {
085            Debug.WriteLine("protected void Application_PreSendRequestContent();");
086        }
087 
088        protected void Application_AcquireRequestState(Object sender, EventArgs e)
089        {
090            Debug.WriteLine("protected void Application_AcquireRequestState();");
091        }
092 
093        protected void Application_ReleaseRequestState(Object sender, EventArgs e)
094        {
095            Debug.WriteLine("protected void Application_ReleaseRequestState();");
096        }
097 
098        protected void Application_ResolveRequestCache(Object sender, EventArgs e)
099        {
100            Debug.WriteLine("protected void Application_ResolveRequestCache();");
101        }
102 
103        protected void Application_UpdateRequestCache(Object sender, EventArgs e)
104        {
105            Debug.WriteLine("protected void Application_UpdateRequestCache();");
106        }
107 
108        protected void Application_AuthenticateRequest(Object sender, EventArgs e)
109        {
110            Debug.WriteLine("protected void Application_AuthenticateRequest();");
111        }
112 
113        protected void Application_AuthorizeRequest(Object sender, EventArgs e)
114        {
115            Debug.WriteLine("protected void Application_AuthorizeRequest();");
116        }
117 
118        protected void Session_Start(Object sender, EventArgs e)
119        {
120            Debug.WriteLine("protected void Session_Start();");
121        }
122 
123        protected void Session_End(Object sender, EventArgs e)
124        {
125            Debug.WriteLine("protected void Session_End();");
126        }
127    
128}

среда, 20 апреля 2011 г.

четверг, 10 февраля 2011 г.

вторник, 25 января 2011 г.

what leads to success?

Richard St. John's 8 secrets of success:

What LEADS to SUCCESS?
  1. Passion
  2. Work
  3. Focus
  4. Persist
  5. Ideas
  6. Good
  7. Push
  8. Serve
8 секретов успеха:
  1. Страсть
  2. Работа
  3. Фокусирование на одной цели
  4. Упорство
  5. Идеи
  6. Быть полезным
  7. Всегда подталкивать себя
  8. Служить людям