понедельник, 16 июля 2012 г.
среда, 4 июля 2012 г.
пятница, 30 марта 2012 г.
четверг, 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
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 НЕ делает.
Непонимание ViewState'а ведет к...
- Потере важной информации
- Атакам на ViewState
- Плохой производительности — вплоть до ОТСУТСТВИЯ ПРОИЗВОДИТЕЛЬНОСТИ
- Плохой расширяемости — как много пользователей вы сможете обслужить, если каждый из них будет отправлять 50k с каждым запросом?
- Плохому дизайну вообще
- Головной боли, тошноте, головокружениям и необратимому искривлению формы надбровных дуг
Что делает ViewState?
Это список основных функций ViewState'а. Каждая из них служит определенной цели. Далее мы рассмотрим, как именно они этих целей достигают.
- Сохраняет данные элементов управления по ключу, как хэш-таблица
- Отслеживает изменения состояния ViewState'а
- Сериализирует и десериализирует сохраненные данные в скрытое поле на клиенте
- Автоматически восстанавливает данные на postback'ах
Еще более важно понимать, что ViewState НЕ делает.
Что не делает ViewState?
- Автоматически сохраняет состояние полей класса (скрытых, защищенных или открытых)
- Запоминает какую-либо информацию при загрузке страницы (только postback'и)
- Исключает необходимость загружать данные при каждом запросе
- Отвечает за загрузку данных, которые были отправлены на сервер, например введенных в текстовое поле (хотя ViewState и играет здесь важную роль)
- Варит вам кофе
пятница, 22 апреля 2011 г.
Список событий в GLOBAL.ASAX
Теория и практика MVC »
Список событий в GLOBAL.ASAX
пятница, 22 апреля 2011, 07:25 | Комментарии: 1 В этой небольшой памятке перечислены события, который можно перехватить используя методы, определяемые в файле global.asax.Список событий в порядке из вызова
Чтобы не было путаницы в дальнейшем, определим чем аутентификация отличается от авторизации:- Аутентификация – идентификация личности пользователя (например по его имени и пароль).
- Авторизация – определение прав на запрашиваемый пользователем ресурс (страницу, сервис).
01 | // запуск веб-приложения |
02 |
03 | protected void Application_Start(Object sender, EventArgs e); |
04 |
05 | // получение запроса |
06 |
07 | protected void Application_BeginRequest(Object sender, EventArgs e); |
08 | protected void Application_AuthenticateRequest(Object sender, EventArgs e); |
09 | protected void Application_AuthorizeRequest(Object sender, EventArgs e); |
10 | protected void Application_ResolveRequestCache(Object sender, EventArgs e); |
11 |
12 | // начало сессии, один раз для каждого клиента |
13 |
14 | protected void Session_Start(Object sender, EventArgs e); |
15 |
16 | // обработка запроса |
17 |
18 | protected void Application_AcquireRequestState(Object sender, EventArgs e); |
19 | protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e); |
20 | protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e); |
21 | protected void Application_ReleaseRequestState(Object sender, EventArgs e); |
22 | protected void Application_UpdateRequestCache(Object sender, EventArgs e); |
23 | protected void Application_EndRequest(Object sender, EventArgs e); |
24 |
25 | // конец запроса |
26 |
27 | // отправка ответа |
28 |
29 | protected void Application_PreSendRequestHeaders(Object sender, EventArgs e); |
30 | protected void Application_PreSendRequestContent(Object sender, EventArgs e); |
31 |
32 | // конец сессии, один раз для каждого клиента |
33 |
34 | protected void Session_End(Object sender, EventArgs e); |
35 |
36 | // завершение работы веб-приложения |
37 |
38 | protected void Application_Disposed(Object sender, EventArgs e); |
39 | protected void Application_End(Object sender, EventArgs e); |
- protected void Application_Start(Object sender, EventArgs e);
- protected void Application_BeginRequest(Object sender, EventArgs e);
- protected void Application_AuthenticateRequest(Object sender, EventArgs e);
- protected void Application_AuthorizeRequest(Object sender, EventArgs e);
- protected void Application_ResolveRequestCache(Object sender, EventArgs e);
- protected void Session_Start(Object sender, EventArgs e);
- protected void Application_AcquireRequestState(Object sender, EventArgs e);
- protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e);
- protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e);
- protected void Application_ReleaseRequestState(Object sender, EventArgs e);
- protected void Application_UpdateRequestCache(Object sender, EventArgs e);
- protected void Application_EndRequest(Object sender, EventArgs e);
- protected void Application_PreSendRequestHeaders(Object sender, EventArgs e);
- protected void Application_PreSendRequestContent(Object sender, EventArgs e);
- protected void Session_End(Object sender, EventArgs e);
- protected void Application_Disposed(Object sender, EventArgs e);
- protected void Application_End(Object sender, EventArgs e);
- protected void Application_Error(Object sender, EventArgs e);
Пример файла Global.asax со всеми перечисленными обработчиками
Приведенный ниже код может быть добавлен в ASP.NET или ASP.NET MVC приложение. В каждом приведенном методе используется вызов Debug.Write() из пространства имен System.Diagnostics для вывода уведомления в окно Output. Таком образом можно самостоятельно посмотреть на порядок вызова обработчиков событий (код взять из ASP.NET MVC приложения).001 | namespace 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 г.
Моё резюме
Выложил свое публичное резюме
http://ural.hh.ru/resume/0b35b7beff00d0a0f80039ed1f344577335333
http://ural.hh.ru/resume/0b35b7beff00d0a0f80039ed1f344577335333
пятница, 4 марта 2011 г.
четверг, 10 февраля 2011 г.
вторник, 25 января 2011 г.
среда, 29 декабря 2010 г.
четверг, 21 октября 2010 г.
афоризмы новые :: 20 октября 2010
афоризмы новые :: 20 октября 2010:
"Всегда делай то, что тебе нравится, а то что не нравится, оставь делать
тем кому это нравится."
"Всегда делай то, что тебе нравится, а то что не нравится, оставь делать
тем кому это нравится."
среда, 29 сентября 2010 г.
пятница, 24 сентября 2010 г.
Написал интернет-магазин на ASP.NET MVC
Мной почти завершается разработка интернет магазина IntellectShop.
Пока проект open source.
Размещается на площадке codeplex.com
http://intellectshop.codeplex.com
Готовый магазин можно посмотреть на http://www.intec74.ru
Пока проект open source.
Размещается на площадке codeplex.com
http://intellectshop.codeplex.com
Готовый магазин можно посмотреть на http://www.intec74.ru
среда, 11 августа 2010 г.
вторник, 3 августа 2010 г.
Немного юмора :)
#3789: Откровенно интересно
от IT happens
Работаю инженером по ремонту ноутбуков, по долгу службы довольно часто проверяю лэптопы клиентов прямо на их системе.
У 85% пользователей ноутбуков все фото лежат в папках на рабочем столе.
Если мужчина женат, фоном рабочего стола часто выступает фотка с женой (чаще всего свадебная).
У замужних дам чаще всего на рабочем столе их фотка в купальнике или откровенном платье.
У свободных дам на рабочем столе лежат не попрятанные по папкам джейпеги с фотками в откровенном виде.
Если у мужчины на рабочем столе фоном лежит красивая актриса, то в какой-нибудь папке на рабочем столе найдётся «интересное видео».
Только в одном ноутбуке из ста, использующихся (со слов клиента) только для работы, не стоят 3D-игры.
от IT happens
Работаю инженером по ремонту ноутбуков, по долгу службы довольно часто проверяю лэптопы клиентов прямо на их системе.
У 85% пользователей ноутбуков все фото лежат в папках на рабочем столе.
Если мужчина женат, фоном рабочего стола часто выступает фотка с женой (чаще всего свадебная).
У замужних дам чаще всего на рабочем столе их фотка в купальнике или откровенном платье.
У свободных дам на рабочем столе лежат не попрятанные по папкам джейпеги с фотками в откровенном виде.
Если у мужчины на рабочем столе фоном лежит красивая актриса, то в какой-нибудь папке на рабочем столе найдётся «интересное видео».
Только в одном ноутбуке из ста, использующихся (со слов клиента) только для работы, не стоят 3D-игры.
пятница, 16 июля 2010 г.
Что должен знать правильный .NET-разработчик
Автор: Scott HanselmanОригинал: What Great .NET Developers Ought To Know (More .NET Interview Questions)
Что должен знать правильный .NET-разработчик
Каждый кто пишет код
- Объясните разницу между нитью (Thread) и процессом (Process)
- Что такое сервис (Windows Service) и как его жизненный цикл отличается от «стандартного» EXE?
- Какой максимальный объем памяти может адресовать один процесс? Отличается ли он от максимального объема виртуальной памяти, доступной системе? Как это влияет на структуру системы?
- В чем различие между EXE и DLL?
- Что такое строгая типизация (strong-typing) в сравнении со слабой типизацией (weak-typing)? Какая предпочтительнее? Почему?
- Некий продукт называют «контейнером компонентов» ("Component Container"). Назовите по крайней мере 3 контейнера компонентов, поставляемых с семейством продуктов Windows Server Family.
- Что такое PID? Чем он полезен при выявлении неисправностей системы?
- Сколько процессов могут слушать один и тот же порт TCP/IP?
- Что такое GAC? Какую проблему он разрешает?
.NET-разработчик среднего уровня
- Объясните разницу между интерфейсно ориентированным (Interface-oriented), объектно ориентированным и аспектно ориентированным (Aspect-oriented) программированием
- Объясните что такое «интерфейс» и чем он отличается от класса
- Что такое Reflection?
- В чем различие между XML Web Services с использованием ASMX и .NET Remoting с использованием SOAP?
- Являются ли системы типов, представленные в XmlSchema и в CLS — изоморфными?
- Концептуально, в чем различие между ранним и поздним связыванием (early-binding и late-binding)?
- Использование Assembly.Load — это статическая или динамическая ссылка?
- Когда уместно использование Assembly.LoadFrom, а когда Assembly.LoadFile?
- Что такое «Asssembly Qualified Name»? Это имя файла? В чем различие между ними?
- Правильно ли так писать?
Assembly.Load("foo.dll"); - Чем отличается «strongly-named» сборка от «НЕ strongly-named» сборки?
- Может ли DateTime равняться null?
- Что такое JIT? Что такое NGEN? Каковы преимущества и ограничения каждого из них?
- Как основанный на поколениях сборщик мусора в .NET CLR управляет жизненным циклом объекта? Что такое «non-deterministic finalization»?
- В чем различие между Finalize() и Dispose()?
- Чем полезен using()? Что такое IDisposable? Как он поддерживает deterministic finalization?
- Что делает эта полезная команда? tasklist /m "mscor*"
- В чем разница между «in-proc» и «out-of-proc»?
- Какая технология позволяет выполнять out-of-proc взаимодействие в .NET?
- Когда вы запускаете компонент из под ASP.NET, в каком процессе он работает под Windows XP? Windows 2000? Windows 2003?
Ведущий разработчик
- Что не так вот в следующей строке?
DateTime.Parse(myString); - Что такое PDB? Где они должны находится, чтобы можно было выполнять отладку?
- Что такое «цикломатическая сложность» (cyclomatic complexity) и почему она важна?
- Напишите стандартный lock() плюс «двойную проверку» для создания критической секции вокруг доступа к переменной.
- Что такое «FullTrust»? Имеют ли FullTrust сборки, помещенные в GAC?
- Какие преимущества получает ваш код, если вы декорируете его атрибутами, относящимися к особым Security permissions?
- Что делает эта команда?
gacutil /l | find /i "Corillian" - Что делает эта команда?
sn -t foo.dll - Какие порты брандмауэра должны быть открыты для DCOM? Каково назначение порта 135?
- Сопоставьте OOP и SOA. Каковы принципы каждого из них?
- Как работает XmlSerializer? Каких ACL permissions требует использующий его процесс?
- Почему catch(Exception) почти всегда — плохая мысль?
- В чем разница между Debug.Write и Trace.Write? Когда должен быть использован каждый из них?
- В чем различие между компиляцией в Debug и в Release? Есть ли значительная разница в скорости? Почему или почему нет?
- Как работает JIT — по сборке целиком или по методу? Как это влияет на working set?
- Сравните использование абстрактного базового класса и использование интерфейса?
- В чем различие между a.Equals(b) и a == b?
- В контексте сравнения, что такое идентичность объектов по сравнению с эквивалентностью объектов?
- Как можно выполнить глубокое копирование (deep copy) в .NET?
- Изложите ваше понимание IClonable.
- Что такое «упаковка» (boxing)?
- string — это тип значений (value type) или ссылочный тип?
- В чем значимость паттерна "PropertySpecified", используемого в XmlSerializer? Какую проблему он пытается разрешить?
- Почему в .NET выходные параметры (out parameters) не стоит применять? Действительно ли это так?
- Может ли атрибут быть установлен на один из параметров метода? Чем это полезно?
Разработчик компонентов на C#
- Сопоставьте использование override и new. Что такое «shadowing»?
- Объясните использование virtual, sealed, override и abstract.
- Объясните использование и значение каждого компонента строки:
Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d - Объясните различия между public, protected, private и internal.
- Какое преимущество вы получаете от использования первичной сборки взаимодействия (Primary Interop Assembly, PIA)?
- Благодаря какому механизму NUnit узнает, какой метод протестировать?
- В чем различие между:
catch(Exception e){throw e;} и
catch(Exception e){throw;} - В чем разница между typeof(foo) и myFoo.GetType()?
- Объясните что происходит в первом конструкторе:
public class c{ public c(string a) : this() {;}; public c() {;} }
Чем полезна такая конструкция? - Что такое «this»? Может ли this использоваться в статическом методе?
Разработчик на ASP.NET (UI)
- Объясните, как POST-запрос формы из браузера становится на серверной стороне событием — таким как Button1_OnClick.
- Что такое «PostBack»?
- Что такое «ViewState»? Как он кодируется? Является ли он шифрованным? Кто использует ViewState?
- Что такое
element и для чего используются эти две технологии ASP.NET? (В оригинале: What is the element and what two ASP.NET technologies is it used for?) - Какие три Session State providers доступны в ASP.NET 1.1? Какие преимущества и недостатки у каждого из них?
- Что такое «Web Gardening»? Как его использование влияет на проект?
- В заданном ASP.NET-приложении, сколько объектов-приложений имеется, если это одно-процессорная машина? двухпроцессорная? двухпроцессорная с включенным Web Gardening? Как это отражается на проекте?
- Используются ли нити (threads) ASP.NET приложения повторно для различных запросов (requests)? Получает ли каждый HttpRequest свою собственную нить? Должны ли вы в ASP.NET использовать Thread Local storage?
- Полезен ли атрибут [ThreadStatic] в ASP.NET? Есть ли побочный эффект? Это хорошо или плохо?
- Дайте пример того, как использование HttpHandler может упростить существующий проект, который обслуживает Check Images на .aspx-странице.
- На события какого вида может подписываться HttpModule? Какое влияние они могут оказать на реализацию? Что может быть сделано без перекомпиляции ASP.NET-приложения?
- Опишите способы представления «arbitrary endpoint (URL)» и направьте запросы к этой endpoint в ASP.NET.
- Объясните как работают cookies. Дайте пример злоупотребления Cookie.
- Объясните важность HttpRequest.ValidateInput()?
- Какого рода данные передаются в заголовках HTTP (HTTP Headers)?
- Сравните HTTP-запросы вида GET и POST. Что такое «HEAD»?
- Назовите и опишите по крайней мере 6 статус-кодов HTTP (HTTP Status Codes) и объясните о чем они говорят клиенту, давшему запрос.
- Как работает «if-not-modified-since»? Как это может быть программно реализовано на ASP.NET?
- Объясните <@OutputCache%> и использование «VaryByParam», «VaryByHeader».
- Как работает «VaryByCustom»?
- Как можно реализовать кэширование готового HTML в ASP.NET, кэшируя отправляемые версии страниц, полученные по всем значениям q= кроме q=5 (например, http://localhost/page.aspx?q=5)?
Разработчик, использующий XML
- В чем назначение XML Namespaces?
- Когда уместно использование DOM? Когда неуместно? Есть ли ограничения по размеру?
- Что такое «WS-I Basic Profile» и почему он важен?
- Напишите простой XML-документ, использующий пространство имен (namespace) по умолчанию, а также qualified (prefixed) namespace. Добавьте элементы из обоих пространств имен.
- В чем основное фундаментальное различие между элементами (Elements) и атрибутами (Attributes)?
- В чем различие между «Well-Formed XML» и «Valid XML»?
- Как бы вы валидировали XML используя .NET?
- Почему такое использование — почти всегда неудачно. В каких случаях такое уместно?
myXmlDocument.SelectNodes("//mynode"); - Объясните различие между «pull-style parsers» (XmlReader) и «eventing-readers» (Sax)
- В чем различие между XPathDocument и XmlDocument? Опишите ситуацию когда один из них может быть использован над другим.
- В чем различие между XML "Fragment" и XML "Document"
- Что означает — «каноническая» форма XML?
- Почему спецификация XML InfoSet отличается от Xml DOM? Что пытается решить InfoSet?
- Сравните DTD и XSD. В чем они схожи, в чем различны? Что предпочтительнее и почему?
- Поддерживаются ли DTD в System.Xml? Как именно?
- Всякая ли XML Schema может быть представлена в виде графа объектов? А наоборот?
Перевод: Никита Зимин,
ведущий разработчик компании «Деловые программы»
ведущий разработчик компании «Деловые программы»
вторник, 13 июля 2010 г.
Анекдот :)
Настройщик пианино настраивает инструмент в комнате отдыха психбольницы.
В комнату заходит мужчина и включает телевизор. Орущий телевизор мешает
настройщику работать, но он решает не спорить, а просто подходит к
телевизору и молча его выключает. Мужчина странно смотрит на настройщика
и снова включает телевизор. Так повторяется несколько раз. Первым не
выдерживает настройщик:
- Послушайте, я пытаюсь настроить пианино и для этого мне нужна тишина.
Тогда мужчина рассмеялся и сказал:
- Я телевизионный мастер и пришёл починить телевизор. Я думал, что вы
сумасшедший и просто стучите по клавишам.
В комнату заходит мужчина и включает телевизор. Орущий телевизор мешает
настройщику работать, но он решает не спорить, а просто подходит к
телевизору и молча его выключает. Мужчина странно смотрит на настройщика
и снова включает телевизор. Так повторяется несколько раз. Первым не
выдерживает настройщик:
- Послушайте, я пытаюсь настроить пианино и для этого мне нужна тишина.
Тогда мужчина рассмеялся и сказал:
- Я телевизионный мастер и пришёл починить телевизор. Я думал, что вы
сумасшедший и просто стучите по клавишам.
Подписаться на:
Сообщения (Atom)











