вторник, 26 января 2010 г.
Градусник. Последние изменения
Итак, кроме исправления старых багов (на сайте и в программе) и добавления новых, изменения внутренней архитектуры на более удобную и функциональную, из заметных изменений можно выделить следующие (без какого либо порядка: алфавитного, временного или по-важности):
1. Изменение домена на .com
Теперь сайт переехал на новый домен yartemp.com, со старого .co.cc, так что теперь всё гораздо солиднее, ну и удобнее мне для управления. Будем надеяться, что этот домен Яндекс всё-таки осилит и сможет заиндексировать. Всё-таки у него алгоритмы на порядок хуже, если сравнивать с гуглом и бингом. Гугл, так вообще копается в сайте, как у меня дома
2. Появился более или менее нормальный F.A.Q.
Теперь хотя бы пользователи смогут прочитать о том как всё работает и какие проблемы бывают.
3. Теперь на графике показываются день и ночь
Т.е. восход и закат, если говорить научно. Выглядит это примерно так:
Более тёмным фоном показывается ночь, светлым, соответственно день. Будет интересно понаблюдать весной и летом, как меняется температура с восходом солнца.
4. Картинки с графиками теперь сжимаются более эффективно
В код добавлен алгоритм, который сжимает картинки раза в 2 относительно стандартных средств .NET, это всё делается в фоне и незаметно для пользователей, в результате страница обновляется ещё быстрее, и трафика потребляется ещё меньше.
Также ещё есть небольшие изменения и новые фичи, о них рассказано в F.A.Q., в программе yarTemp исправлены некоторые ошибки, теперь она чуть лучше работает на x64 системах, но о наиболее интересных улучшениях я решил написать тут, чтобы знали, что работа идёт, сайт совершенствуется. За последний месяц количество посетителей увеличилось где-то в 3 раза, и это без активной рекламы с моей стороны, что не может не радовать. Всё-таки приятно, когда люди получают свежую и актуальную информацию. Посмотрим, что будет дальше.
понедельник, 18 января 2010 г.
DefaultHttpHandler + PNG + FireFox
Я писал про использование DefaultHttpHandler для отдачи файлов, принципиально ничего не изменилось, я по-прежнему считаю это неплохим способом, но недавно была обнаружена небольшая проблема с этим способом.
Проблема заключается в том, что в .NET 3.5 SP1 (специально уточняю версию, ибо подобный код имеет тенденцию изменяться) данный метод не знает тип MIME для png-файлов и вместо image/png отдаёт application/octet-stream.
Что самое интересное, в большинстве случаев тут ничего страшного нет. Практически все браузеры определят содержимое по контексту и содержимому файла. Но есть одно досадное исключение , и исключение это зовут FireFox. Если попробовать скачать файл в лоб, то он не посмотрит на то, что это картинка и предложит сохранить его.
Так что не забудьте добавить дополнительный код для png-файлов, выставляющий правильный Content-Type. Хотя у меня такое предположение, что в 4-ом фреймворке всё-таки научится данный метод отдавать правильный тип для png-файлов, а также, возможно и других, чуть менее распространённых.
пятница, 8 января 2010 г.
Бекап системы через виртуалку
Есть люди, которые переставляют операционку раз в месяц. Я к ним не отношусь, и предыдущая система у меня жила около 6 лет (может даже больше, хвосты идут с 2001-ого года). И апгрейдить я её решил из-за того, что уже пора. Надо двигаться дальше и разбираться в новых технологиях.
При этом, терять все настройки, накопленные за такое время очень не хотелось: хоть и много хлама в старой системе, всё-таки есть полезные и настроенные программы, о которых вспоминаешь в самый ответственный момент, и устанавливать их заново, иногда просто не бывает времени. Надо взять и использовать.
Собственно встал вопрос, что с этим делать. Апгрейд системы у меня не получался, да и после апгрейда обычно получаются глюки, да и сохраняется ненужный хлам, от которого действительно нужно избавиться. Поэтому я решил сделать финт ушами и завернуть старую систему в виртуальную машину, которую потом поднять на новой системе и использовать, пока не будет всё окончательно настроено и установлено (а потом использовать в ситуациях, когда нужно работать со старой, настроенной программой, у которой проблемы в новой системе).
Собственно, о том, как всё это сделать, я и расскажу, возможно это вам пригодится. Заодно, это будет полезно на работе, если вы хотите переделать сервер в виртуальную машину, чтобы потом его было легко перемещать между физическими компьютерами и избавиться от проблем с железом (умер физический сервер, поднимаем виртуалку на другом, а этот не торопясь восстанавливаем без давления коллег достающих фразой "ничего не работает"). Кстати, на работе для виртуалок рекомендую использовать Microsoft Hyper-V Server, он бесплатный, т.е. не надо дополнительно платить за лицензию на хостовую систему. Т.е. всё просто замечательно в этом плане.
Для дома же, думаю проще использовать VirtualPC или VirtualBOX. Они тоже бесплатные, и неплохо работают. VirtualBOX более навороченный и поддерживает виртуальные жёсткие диски больше 127Gb. В тоже время, в Windows 7, VirtualPC уже встроен (для работы XP Mode), так что он как бы "роднее", поэтому выбор за вами. В любом случае, попробовать можно оба варианта и остановиться на более подходящем.
Итак, приступим.
0. Оцениваем размер свободного места для бекапа. Лучше, чтобы было места в количестве размера диска C: Если же нет такого объёма, но вам хочется это сделать, то прочитайте до конца и подумайте, сколько вам нужно освободить.
1. Берём программу Disk2vhd от Марка Руссиновича и делаем образ диска C: (остальные диски можно будет потом подключить как сетевые, но если у вас достаточно места, и хотите надёжный бекап, можно сделать образ всего).
Делать образ можно хоть на тот же самый диск, но естественно, для производительности нужно на другой. Программа сразу говорит необходимый объём места с учётом только занятого места. Т.е. если у вас диск C имеет объём 500Gb, но при этом занято только 20Gb, то только 20Gb и потребуется.
2. После изготовления образа, создаём в VirtualPC или VirtualBOX виртуальную машину, подцепляем к ней диск (если диск больше чем 127Gb, то используйте VirtualPC аккуратно, он плохо поддерживает большие диски), и смотрим на клон вашей системы только в отдельном окне. Зрелище потрясающее.
2а. Если система не поднялась с первого раза, то могут быть следующие проблемы:
- Проблема с файловой системой, которая почему-то некорректно создалась. Придётся лечить всякими утилитами для восстановления разделов (например TestDisk). Для удобства, можете поднять отдельную систему на виртуалке, подцепить к ней этот проблемный образ и его чинить.
- Проблемы с загрузкой, когда система не может загрузиться. Тут неплохо помогает загрузочный диск (вам достаточно иметь ISO с ним) от Vista или Windows 7. Запускаете Startup Repair и он может подлечить некоторые проблемы
- Проблема с загрузкой виртуальной системы (синий экран, перезагрузки). Тут уже всё хуже, пробуем грузиться в Safe Mode, или делаем жёсткий Repair с установочного диска. (когда создаёте образ, можете поиграться еще с галочкой Fix HAL).
И помните, что на данном этапе, если вы что-то совсем разломаете, вы всегда можете начать всё сначала, и попробовать снова.
3. Когда виртуальная система заработала, можно удалить явно ненужные программы и файлы (для экономии места), сделать дефрагментацию, взять программу SDelete, запустить её с ключом -z (забить нулями свободное место). После этого на физической системе взять VirtualPC и сжать образ для экономии места. Но, можете этого и не делать, или сделать потом, когда будет новая система.
Вот и всё. Теперь у вас есть виртуалка со старой системой, которая будет работать на любом компьютере. Т.е. мы отвязались от железа и можем приступать к установке новой. После установки, поднимаем виртуалку и не торопясь переносим настройки из старой системы, в новую.
Несколько слов, про установку Windows 7 или Vista:
- Чтобы полностью избавиться от старой системы без форматирования жёсткого диска при загрузке в Setup нажимаем Shift-F10, открывается консоль, там переименовываем или удаляем следующие папки: Documents And Settings (в XP), Users (в Vista), Program Files, Windows. Всё, у нас больше нет старой системы. Т.е. установка не будет лавировать между ними записывая новые данные, а просто установится чистой и блестящей. При этом, если что-то пойдёт не так, переименовываем папки обратно и возвращаем всё как было.
- Если Windows откажется ставится на данный жёсткий диск, про причине его "неправильности", с помощью сторонних утилит выделяем вначале диска 100Mb, для личных нужд Windows. Эти 100Mb при загрузке система автоматически возьмёт себе и создаст там маленький образ для восстановления системы
- Если не хочется ставить систему с диска, можно поставить с флешки. Для этого достаточно взять бесплатную программу Windows 7 USB/DVD Tool и она сама всё сделает (как вариант, можно попробовать UNetbootin — она больше для автоматического создания Linux-образов, но думаю и для этого подойдет)
- После установки, можно для большинства программ перенести настройки с помощью копирования старых из Documents And Settings в новые Users (только следите за путями, если они абсолютные)
Ну вот и всё. У вас есть новая система и рабочая старая. При этом, если с новой что-то случится, вы можете с чистой совестью всё установить заново, при этом у вас всегда будет готовая и настроенная старая. Свежую же систему апгрейдить ещё проще. У Microsoft'а появились неплохие утилиты для бекапа настроек и миграции, так что можно всё сделать ещё проще. С другой стороны, при оборачивании старой системы в виртуалку, мы всегда оставляем пути отхода, на случай, если что-то пойдёт не так и мы всё сломаем. Так что, это хоть и немного дольше, и требует много места, зато обеспечивает сохранность данных.
вторник, 8 декабря 2009 г.
70-536
Несмотря на то, что данный экзамен я сдал ещё в пятницу, всё не доходили руки написать впечатления от него. Ибо писать собственно-то и нечего.
Экзамен весьма простой, как-то даже странно сравнивать его с 70-562, ибо многие вопросы можно отвечать не задумываясь, для других, достаточно вдумчиво почитать вопрос, чтобы отсечь неверные ответы. Хотя, конечно, бывают и сложные вопросы, у меня возникли проблемы где-то с пятью вопросами, сколько реально ошибок сделал — неизвестно, но не очень много. Ибо итоговый результат: 953 балла из 1000.
Тем, кто собрался что-то сдавать, рекомендую начать с него, чтобы оценить свои силы. Материалов для подготовки по всему интернету лежит достаточно, при этом, достаточно только базовых знаний. Например, у меня попался всего один вопрос с generic'ами, пара вопросов на стандартные типы, всё остальное в принципе, напрямую к .NET 2.0 не относится (а 3.5 и не пахнет).
В принципе, особое внимание рекомендую уделить (т.к. практически никто этим не занимается): Code Access Security, System Security, Installers, Services. Ну, можно немножко еще глянуть на глобализацию и локализацию . Ну и немножко вспомнить стандартные типы, потоки, и дебаггинг. Хотя там в общем-то можно и догадаться.
В общем, на этом всё, я теперь буду пробовать готовиться к Pro-экзамену 70-564. Ден Гладких утверждает что он простой и нелепый.
пятница, 27 ноября 2009 г.
Сдача сертификационных экзаменов Microsoft в Ярославле
Собственно, данный пост пишу как отчёт, и как руководство к действию для коллег и желающих сдать экзамен и получить статус. Возможно, если осилите его, то будет всё проще (хотя казалось бы, куда ещё). Поэтому, на всякий случай напишу очень подробно. Если меня не хватит, или наоборот, я надоем, то можно почитать про опыт Дена Гладких, расписано всё неплохо и коротко. Итак, понеслась:
Зачем всё это нужно?
Думаю, каждый должен решить это сам. Например, я решил так, что если я могу сдать, то почему-бы и нет? Стоит это не очень дорого, на первый взгляд всё не очень сложно, да и стоит попробовать себя в этом. Собственно собирался сдавать я давно (года этак 4 назад начал собираться ), но сдаться решил только сейчас.
Собственно, из плюшек и бенефитов вы получаете только статус MCP, красивый логотипчик и сертификат, и в общем-то всё. Естественно, понты, это святое, и повесить красивую бумажку на стену, или показать её работодателю, это может быть важной причиной. Но ещё раз повторюсь, реальных, физических подарков вы не получите. Возможно попадёте где-нибудь под акцию, получите книжку, или можете сдать другие экзамены со скидкой, но это в общем-то не очень существенно. Возможно, магазин MCP eStore окажется для вас неплохим вариантом (кружки, ручки, сумки, майки), но доставка в Россию стоит $100, так что лучше для такого искать другие магазины.
Какая бывает сертификация?
Расскажу только в контексте разработчиков, ибо тут всё коротко и просто. Для админов список гораздо шире. Собственно, открываем соответствующий сайт и всё видим. Если не брать в расчёт устаревшие экзамены то получаем:
- MCP — (Microsoft Certified Professional) это даже не статус, а просто факт того, что ты уже что-то сдал и получил доступ к сайту. Никаких бумажек и логотипов, но для сайтов, связанных с Microsoft этого уже достаточно (itcommunity.ru, MCP-клубы, партнёрская программа)
- MCTS — (Microsoft Certified Technology Specialist) базовый статус, который подтверждает знание какой-либо технологии. Если сдавать экзамены из разных областей, то можно набрать толпу таких статусов и получить кучу сертификатов. Полностью он будет выглядеть примерно так (мой текущий статус):
- MCPD — (Microsoft Certified Professional Developer) Собственно главный статус для разработчика. Опять же, можно получить несколько таких статусов, самый крутой: Enterprise Application Developer 3.5, но всё равно обидно, что кончились всякие MCAD и MCSD.
Теперь, собственно о том, какие варианты есть конкретно для .NET разработчика:
- Базовый экзамен, который практически необходим 70-536 (TS: Microsoft .NET Framework – Application Development Foundation), требуется для получения любого другого статуса. Так что рекомендую начинать сдавать с него, если вы ещё не решили, в какую сторону пойдёте. Начинайте с него и не прогадаете.
- Для того, чтобы получить MCTS нужно сдать по крайней мере 2 экзамена. Собственно, я двигаюсь в сторону .NET Framework 3.5, ASP.NET Applications, так что начал с 70-562 (TS: Microsoft .NET Framework 3.5, ASP.NET Application Development), хотя он должен быть вторым.
- Чтобы получить MCPD, нужно сдать специальный "Pro" экзамен по выбранной специализации. Т.е. в моём случае: 70-564 (PRO: Designing and Developing ASP.NET Applications Using Microsoft .NET Framework 3.5)
- Когда выйдет .NET Framework 4.0, дожен появиться специальные Upgrade экзамен, так что, как вы его сдадите, вы получите уже MCPD по 4.0, и не надо будет сдавать всё заново. Но за один экзамен всё-таки заплатить придётся. Так что можете ждать фреймворка 4.0 и не сдавать экзамены
Собственно, это про экзамены. Ещё раз сайт, на котором можно всё поглядеть и почитать: www.microsoft.com/learning/
Как зарегистрироваться?
Тут, в общем, есть два пути: Prometric и личная явка в сертификационный центр. Первый вариант позволяет проделать все операции сидя за компьютером (к тому же он дешевле), второй позволяет оплатить рублями, назначить экзамен в тот этот же день, да и вообще, идёт общение с живым человеком. В Ярославле есть 3 сертификационных центра (на пятой странице прометрика, чтобы потом не искать долго):
- Интернет Центр ЯрГУ (я там сдавал экзамен). В первом корпусе. Тел. 79-77-31
- КАМИ (вроде первый в Ярославле). Чайковского, 40A (рядом с Мелоди-клабом). Тел. 72-75-55
- Академия МУБиНТ. Советская 80. Тел. 8-915-969-90-99. Это рядом с Шинным.
Так, что смотрите, где вам удобнее, и можете туда звонить, или идти на Прометрик. Уточню: сдаёте экзамен вы не Microsoft, а отдельной конторе, точнее организации, с кем прометрик заключил договор. Соответственно на них накладываются определённые требования, так что в разных организациях всё должно быть примерно одинаково и принципиальной не должно быть. Кстати, можно сдавать не только экзамены Microsoft, но и другие, но тут я ничего не могу подсказать.
Собственно, как регистрироваться через прометрик:
- Идём сюда, и набираем ваучеров для скидок (15-25%, действуют до конца года). Чтобы потом не возвращаться, можно взять сразу три ваучера (они придут на почту), и потом их использовать.
- Идём вбивать данные на сайт прометрика: register.prometric.com
- Там всё по шагам, так что сложностей не должно возникнуть. В конце нас попросят зарегистрировать и оплатить стоимость экзамена. Так что, если есть карточка, то платим (через paypal нельзя, только в лоб, так что решайте, доверять или нет). Без скидок экзамен стоит $50.
- Ждём указанного времени, и минут за 15 приходим сдаваться.
- Если не получается в указанное время, можно изменить расписание, или вообще отказаться (вроде за сутки до сдачи, но это лучше уточнить).
Уточнение: Я сдавал в интернет центре ЯрГУ, и меня попросили всё-таки им позвонить, причём до регистрации. Т.е. конечно, они меня примут в любое время дня и ночи, но лучше всё же договориться заранее. Кроме того, они сказали про какой-то сдвиг, так что возможно они скажут что лучше немного другое время указать.
Процесс сдачи
Итак, вы всё-таки заявились на экзамен. Тут всё просто. Нужны права и паспорт (тем, у кого нет прав, наверное нужно позвонить уточнить, что можно принести в замен, и нужно ли в принципе). Когда вы придёте, все документы уже будут готовы и вам всего-лишь нужно подписать бумаги о том, что вы завещаете всё свое имущество будете хорошо себя вести и не списывать. Потом вы дожны отдать все свои вещи и выключить телефон (и лучше его тоже отдать ), получите маркеры и пластиковый листок в качестве черновика (как я понимаю, это всё многоразовое и основная цель, чтобы листок с записями вы не утащили с собой или чтобы сотрудники не выкинули его в мусор), место за компьютером и сам тест.
Собственно все вопросы выдаются прометриком и идут через специальную программу. Пользоваться можно только маркером и калькулятором встроенным в тест (если нужно что-нибудь посчитать). Сотрудников можно вызывать только в случае проблем с компьютером.
Вначале возможно будет небольшой опросник, текст соглашения, возможно, небольшой опросник о ваших предполагаемых знаниях, а потом сам тест. На него даётся 3 часа (на 50 вопросов), что весьма дофига. Я управился со всем за 2, и при этом много тупил. Т.е. при желании можно уложиться и в час (только надо ли?). К любым вопросам можно всегда возвращаться, можно помечать их для последующего просмотра, можно менять решение. Тут никаких ограничений нет. Это весьма удобно, сложные вопросы можно уже пересмотреть в конце экзамена, когда на всё уже ответил и время не давит.
Сами вопросы обычно предлагают выбрать один правильный из четырёх вариантов. Изредка бывает выбор двух-трех вариантов (всегда пишут нужное количество). Вопросы грамотные и сводятся к вариантам вида где мы пропустили запятую? С другой стороны, иногда раздражает, что бывают вопросы, на которые ты просто не помнишь правильный ответ, но знаешь, что из MSDN ты найдёшь его за минуту (с непрограммерскими экзаменами, ещё хуже, бывают задания, которые в жизни делаешь на автомате, и по пунктам уже объяснить не можешь, ибо спинным мозгом нажимаешь на кнопки, а приходится выбирать правильный вариант).
После сдачи, можно будет написать комментарий об умственных способностях составителя, о качестве каждого вопроса, о самой процедуре проведения экзамена (уходит прямо в прометрик, судя по всему, проверяют организацию, которая устраивает экзамен). От них можно отказаться, можно ответить. На это даётся дополнительное время, всё добровольно. При этом вам сразу же говорится, сдали вы экзамен или нет, и автоматом печатается листок с конкретными цифрами, и шкалами вида Тема: слабо/сильно. Т.е. конкретные ошибки неизвестны. Но примерно оценить проблемные темы можно.
На этот листок вам ставят хитрую печать, после этого вы должны его посмотреть, запомнить и съесть. Ибо данные цифры и шкалы больше нигде и никогда не покажутся, это ваше личное дело, что вы знаете. И даже если набрали 701 балл при допустимых 700, этого вы никому не обязаны говорить. Говорите, что 1000, всё равно не проверят.
Далее, если вы в первый раз сдаёте, то вам через некоторое время придёт MCP ID, для регистрации на mcp.microsoft.com, там вы можете сотворить свои логотипы, получить PDF с сертификатом или заказать его ($10 за один + $1 за каждый последующий в одной посылке), на сертификате будет стоять личная подпись самого Стивена Балмера. Официальный способ при этом подтвердить статус, это Transcript. Для доступа к нему нужен код доступа, который вы придумываете сами и всегда можете изменить, чтобы прекратить к нему доступ. Так что сертификаты, это в общем-то баловство, но красивое.
Подготовка
Ну и в конце, о том как готовиться. Тут я не помощник. Я почти не готовился, решил что свои-то 700 баллов наберу, и очень пожалел. При сдаче экзамена, сомневался практически в каждом вопросе, было ощущение, что я вообще первый раз вижу этот .NET, и вообще, кто здесь?
Темы для подготовки есть в описании экзамена, а уж как вы будете готовиться: читать книжки, курить брейндампы, копать MSDN или смотреть доклады, решайте сами. Глубоких знаний не требуется, но требуются достаточно широкие (e.g. 70-562): Microsoft AJAX, Mobile Controls, Declarative Data Sources, Control Lifecycle, Deployment, Configuring, Security.
Вообще, могу сказать, что на MesureUp вопросы близко к теме, а на BrainBench — вообще не в тему.
воскресенье, 22 ноября 2009 г.
Сжатие ViewState
ViewState — в ASP.NET весьма интересная и полезная технология, но у неё есть один существенный недостаток. ViewState может очень сильно увеличивать размер страницы, и кроме всего прочего все эти данные пойдут на сервер назад, что для пользователей с узким каналом может выливаться в "тормоза" приложения, хотя само-то оно будет быстрым.
И что самое неприятное, все эти проблемы активно вылезают обычно ближе к окончанию проекта, когда всё уже сделано, и менять уже логику поздно. Точнее, смена логики может привести к непредсказуемым глюкам, а если всё тестировать заново, то это займёт слишком много ресурсов, так что обычно всё так и оставляют, и на будущее все программисты твёрдо себе говорят: в следующем проекте будем следить за ViewState. Но вы поняли.
Собственно, есть ситуация, проект близится к концу, нужно что-то с ViewState'ом делать. Для начала, стоит взять типичную страницу, забрать из неё ViewState (он хранится в hidden-поле __VIEWSTATE), убрать кодирование в base-64 (сам ViewState не должен быть зашифрован, естественно), и посмотреть на него. На данном этапе иногда можно выкинуть некоторые элементы, которые случайно попали туда. Например, в одном проекте часть рендера страницы выводилась через asp:Literal, который по умолчанию пихает всё свое содержимое во ViewState, что, например, для русского текста длинной в 100 байт превратится в 300 байт на клиенте.
Но, когда базовые вещи исключены, всё равно может остаться большой вьюстейт (например, у нас в одном проекте с хитрым гридом он был 80 килобайт), и с ним надо что-то кардинально сделать. В этом случае, можно попробовать самое простое решение: сжать вьюстейт, благо ASP.NET предоставляет достаточно простую возможность для этого.
Вначале, нам необходимо переопределить PageStatePersister, собственно, тот класс, который и отвечает за хранение. В ASP.NET существуют две реализации, которые хранят ViewState в hidden-поле (по умолчанию) или в сессии. Нам нужен свой, который будет сжимать содержимое:
protected override PageStatePersister PageStatePersister
{
get
{
return _persister ?? (_persister = new CompressionPageStatePersister(this));
}
}
Для этого перекрываем property PageStatePersister у страницы (Page), и возвращаем инстанс нашего класса:
public class CompressionPageStatePersister : PageStatePersister
{
public CompressionPageStatePersister(Page page) : base(page) { }
public override void Load()
{
string requestViewStateString = base.Page.Request.Form["__CVIEWSTATE"];
if (!string.IsNullOrEmpty(requestViewStateString))
{
Pair pair = (Pair)
ViewStateCompressor.ViewStateDecompress(
Convert.FromBase64String(
requestViewStateString));
base.ViewState = pair.First;
base.ControlState = pair.Second;
}
}
public override void Save()
{
Control control = base.Page.FindControl("__CVIEWSTATE");
if ((base.ViewState != null) || (base.ControlState != null))
{
string s = Convert.ToBase64String(
ViewStateCompressor.ViewStateCompress(
new Pair(base.ViewState, base.ControlState)));
ScriptManager.RegisterHiddenField(base.Page, "__CVIEWSTATE", s);
}
}
}
Как видно, реализация простейшая, перекрываются методы Save и Load, которые сохраняют и загружают ControlState (неотключаемая часть, необходимая для работы контролов) и ViewState. Всё это сохраняается в собственное hidden-поле __CVIEWSTATE, т.к. к обычному у нас нет доступа (но если интересно, то с использованием Reflection, нужно взять private field у класса Page с именем _clientState, и записать значение туда).
Да, и в base-64 кодировать обязательно, ибо особенности стандарта HTTP таковы, что даже если вы попробуете другую кодировку, в реальности будет передано гораздо больше байт.
Ну, и собственно про сжатие, точнее про ViewStateCompressor, это небольшой класс, который сериализует данные и сжимает с помощью GZip:
public static byte[] ViewStateCompress(object viewStateToCompress)
{
ObjectStateFormatter formatter = new ObjectStateFormatter();
MemoryStream output0 = new MemoryStream();
DeflaterOutputStream ds = new DeflaterOutputStream(output0, new Deflater(6, true));
formatter.Serialize(ds, viewStateToCompress);
ds.Close();
return output0.ToArray();
}
public static object ViewStateDecompress(byte[] data)
{
ObjectStateFormatter formatter = new ObjectStateFormatter();
InflaterInputStream ds = new InflaterInputStream(new MemoryStream(data), new Inflater(true));
object value = formatter.Deserialize(ds);
ds.Close();
return value;
}
Небольшие пояснения:
- Для сжатия используется библиотека #zipLib (родная медленнее и хуже жмёт, использовать не стоит)
- Степень сжатия (6) — это по умолчанию, наилучший компромисс качества и скорости
- Не пишутся заголовки GZip, так как они нам не нужны, т.е. другими словами использоуется не GZip, а Deflate — алгоритм сжатия без дополнительной информации
- В качестве сериализатора используется ObjectStateFormatter, который и используется в качестве стандартного (точнее там используется LosFormatter, но итогом работы служит строка в base-64, а мы сами потом трансформируем уже запакованные данные
- В данном случае мы теряем встроенную возможность шифрования ViewState, но её при необходимости легко реализовать, да и расшифровать ViewState будет уже сложнее
Как видно, всё просто: два класса для удобства и один override, и результат — размер данных на клиенте в 2-5 раз меньше, и не на магистральных каналах страницы начинают работать гораздо быстрее.
Да, и постарайтесь не сохранять во ViewState собственные объекты, ибо ObjectStateFormatter достаточно эффективно сериализует базовые типы, но если он не понял про тип, то начинает использовать недостаточно эффективный, но универсальный BinaryFormatter. Если будет время, я постараюсь расписать, как в некоторых случаях можно подменить сериализацию для своих типов, чтобы уменьшить размер ViewState (который из-за этого может тоже весьма значительно сократиться).
вторник, 17 ноября 2009 г.
Мои впечатления о Платформе 2010. Доклады.
Сегодня я расскажу своё впечатление о докладах на Платформе 2010, пока тема окончательно не устарела. Ибо сейчас всё прогрессивное человечество следит за PDC, а я ещё на платформе.
В общем, как я писал в прошлый раз, сейчас я расскажу про доклады, и своё мнение о них, чтобы вам было проще решать, что стоит смотреть, а что можно и пропустить. Итак, поехали.
Обзор ключевых изменений Windows Server 2008 R2
После пленарного доклада, о котором я уже писал и вкусного обеда, я отправился на данный доклад, в качестве докладчика на котором выступал Александр Шаповал. Доклад оказался весьма интересным, я узнал, что Microsoft действительно сделал множество существенных изменений в архитектуре Windows 7 (Server на том же ядре, так что и к нему это тоже относится). В принципе, в докладе ничего принципиально важного нет, но докладчик рассказывал весьма интересно, да и тема сама по себе интересная, так что рекомендую прослушать данный доклад по возможности, за чашечкой чая/кофе. Слушать легко и интересно, ни к чему не обязывает.
С высоты Килиманджаро. Введение в SQL Server 2008 R2
Основным докладчиком тут выступал Алексей Шуленин (если я правильно запомнил, ибо докладчиков было 4). Доклад действительно отражает название. Рассматривались новые фичи с такой высоты... что мне как обычному разработчику было настолько всё далеко и не нужно, что я весьма заскучал. Т.е. на самом деле, шёл весьма специфический BI для серьёзных DBA и архитекторов, разработчикам тут делать абсолютно нечего. Доклад стоит послушать, если это и есть ваша работа. С другой стороны, до конца дослушать доклад я не успел, ибо побежал на экзамен.
Тут должно быть описание следующего доклада, но я был на экзамене, так что надо писать про экзамен. Но про экзамен я напишу позднее, когда схожу на сдачу за свои деньги в своём городе, ибо это будет полезнее. Пока могу сказать — сдал, успешно, статус в блоге висит вверху.
Практика проектов виртуализации
Собственно после сдачи экзамена у меня хватило времени сходить ещё на один доклад, где выступал Алексей Кибкало. Несмотря на название, доклад оказался обычным маркетинговым рассказом о том, как в Microsoft делают виртуализацию. Смысла ноль, смотреть не стоит. Тем кто интересуется, проще позвонить напрямую в Microsoft.
Дальше началась вечерняя программа в исполнении Hosten'а и Гоблина, об этом я уже немного рассказывал. Не дожидаясь окончания, я побежал в гостиницу отсыпаться, ибо на следующий день у меня с утра была запланирована лабораторная работа, и мне хотелось быть бодрым и свежим.
Во второй день я случайно оставил фотоаппарат в камере хранения, так что без фотографий.
Лабораторная работа: Реализация DirectAccess в Windows Server 2008 R2
Скажу сразу, от лабораторной работы я ожидал большего. На практике оказалось всё гораздо банальнее. Выдали мануал для админов-даунов и компьютер с тремя виртуалками, и сказали: "Копать!" И все начали копать. С учётом ограниченности во времени и общей концепции документации всё выглядело весьма уныло. Шаманство, танцы с бубном, непонятные действия. Только потом, я хоть немного начал понимать, что примерно нужно для DirectAccess, во время же лабораторной работы, об этом думать особо не успеваешь, только примерно запоминаешь шаги и то, что лично тебе нужно будет настроить самостоятельно, а не брать уже готовое из виртуалок. Чтобы было понятнее, приведу небольшой пример из документации: В меню Start, кликните Server Manager, кликните Roles, и затем кликните Add Roles. Нажмите Next, и затем на странице Select Server Roles, кликните Web Server (IIS) и затем нажмите Next. Нажмите Next. Нажмите Next, и затем нажмите Install. По завершению установки нажмите Close.
Ну как вам? Нормальному человеку необходимо написать: Поставьте IIS. И всё! Это займёт гораздо меньше времени, ибо не надо отвлекаться на инструкцию пытаясь найти скрытые моменты (а они иногда бывают, запрятанные между кучей стандартных действий). В общем, на лабораторную работу стоит идти только в одном случае: контора за вас платит, и вам совершенно наплевать на её деньги. Иначе, проще потратить столько же времени почитав документацию и узнать гораздо больше.
Хотя, как мне потом рассказали, всё-таки смысл есть: документацию вам читать будет лень, а тут хоть как-то вас заставят пройти все шаги, чтобы в голове отложилась хоть какая-то информация. Ладно, проехали.
ASP.NET 4.0, MVC Framework 2.0 и Visual Studio 2010
С лабораторной работы я побежал на следующий доклад, при этом чуть-чуть опоздав на начало, и был очень удивлён не обнаружив ни единого свободного места. С трудом найдя место я принялся слушать доклад. Докладчиком был Гайдар Магднануров, которого я считаю одним из лучших докладчиков в Microsoft (особенно пикантно это выглядит с учётом того что на платформу я попал благодаря Гайдару, да и тест этот, он наверняка прочитает ). В общем, как бы то ни было, доклад оказался очень интересным, докладчик тоже, я узнал про нововведения, и как с ними жить дальше. Если вкратце, то в 4.0: причесали, подлатали, подкрасили, подкрутили. Стало всё еще лучше чем было. Всем, кто связан с разработкой под ASP.NET, смотреть в обязательном порядке.
Новые возможности веб-платформы Microsoft IIS 7.5
Следующий доклад вёл также Гайдар, но тема была уже более локальная и специфическая. Вкратце: добавили в Server Core полноценную поддержку .NET, немного перекроили IIS, так что стало ещё лучше (кто бы сомневался ), добавили доменных пользователей и трейсинг изменений. Можно послушать доклад, если это вас интересует, в принципе можно и покурить документацию. После доклада весьма продуктивно пообщались с Гайдаром, но запись не велась, так что рассказывать особо и нечего (и незачем ).
Windows Workflow Foundation для архитекторов
Тут я изменил свои планы и пошёл слушать Дэвида Чаппелла, ибо всю конференцию слушал о том, какой он хороший докладчик. Надо сказать, что это действительно так. Докладчик он просто замечательный и слушать его одно удовольствие (я вначале взял девайс для перевода, но он не работал, а я и не настаивал ибо итак всё было понятно и интересно). Так что рекомендую послушать какой-нибудь из его докладов, получите массу положительных впечатлений. А если говорить а самом докладе, то и говорить нечего. Доклад ни о чём. (Хорошо это выглядит после того как я расписал докладчика). Но тем не менее, Дэвид рассказывал банальные вещи, и главное в его докладе было: WWF 4.0 переписали с нуля и он стал быстрым. Кстати, само слово WWF вызывало немало проблем у русскоговорящих слушателей, ибо одно дело сказать вэ-вэ-эф по-русски и все тебя поймут, другое дело попробовать это сказать Дэвиду (да, мы поговорили после доклада). Если кого интересует, то следует говорить даб-эф (Workflow Foundation), чтобы было кратко и понятно.
Silverlight 3. Комплексный обзор платформы
После, я пошел послушать Михаила Черномордикова, про Silverlight. Почему-то тут больше хочется сказать про Мишу, а не про доклад. Миша хороший докладчик, но один из его недостатков, что он весьма быстро говорит, нет, даже так, ВЕСЬМА быстро говорит и выкладывает огромное количество информации на головы слушателей. Ну это наверное даже и неплохо, но можно было бы подсократить, доклад от этого ничего бы не потерял. Хотя, судя по огромной активности Михаила перед докладом, я думаю что он просто такой быстрый человек, находящийся сразу в нескольких местах и успевающий при этом всё сделать. Ну и ещё одна проблема, в том, что Миша всё-таки не очень хорошо работает с аудиторией, для него её нет, он сообщает информацию. Думаю, если эти моменты Михаил пересмотрит, то я буду заслушиваться его докладами.
Да, про сам доклад, про Silverlight. Моё мнение, надоели. Не успеваешь разобраться с одной версией, уже новая на подходе, где всё еще лучше и интереснее. Для пользователей наверное это неплохо, но для разработчиков это ужасно. Надо весьма активно за этим следить, чтобы не пропустить очередную версию. Сам Silverlight при этом весьма и весьма хорошо для разработки, и может весьма просто превращаться в десктопное приложение. В общем, можно послушать, можно прочитать, можно посмотреть доклад. Есть интересные ссылки.
Да, и после доклада я решил узнать, почему у меня падает Opera при работе с Silverlight. Миша сказал, что я неправ и всё должно работать. Пришёл домой и действительно, всё работает! Как не крутил, не смог заставить её упасть. Вот она сила докладчика.
SQL Server 2005/2008: восстановление при катастрофических сбоях
Последний доклад, на который я пошёл, был посвящён работе с SQL сервером. Докладчиком был Дмитрий Артемов. Если вкратце пересказать доклад, то главное это: бэкапы, бэкапы и еще раз бэкапы (да и проверять бэкапы на корректную работу тоже нужно). Стоит скачать презентацию, там всё подробно и понятно, и в документации такого тяжело найти, но слушать в принципе особо не стоит.
После этого я побежал забирать свою пачку подарков (получил еще вэб-камеру за оценку докладов), ну а после этого решил что до конца программы закрытия я всё равно не успею, так что лучше не рисковать и отправиться на поезд.
На этом Платформа 2010 для меня закончилась. Всё было безумно интересно и я совершенно не жалею что съездил.