Author Archives: Robert Haken

avatar Neznámé

About Robert Haken

Software Architect, Founder at HAVIT, Microsoft MVP - ASP.NET/IIS

Ladění výkonu webových aplikací – Slides a dema [TechEd Praha 2010]

Slides a dema z přednášky na konferenci TechEd Praha 2010:

Záznam z přednášky nebyl pořizován, rozšířená podoba byla však prezentována pro WUG Praha a k té záznam existuje.

WebResource.axd: This is an invalid webresource request. Špatné datum na serveru.

Symptom

Všechny requesty na WebResource.axd (včetně základních na .NET skripty) končí chybou 404 – „This is an invalid webresource request.“, resp. „Toto je neplatný požadavek webového prostředku.“

Cause

Problém byl v tom, že na serveru byl nastaven čas o několik měsíců nazpět.

Jestli tomu vadí, že aplikace byla kompilována později, než je datum/čas na serveru, nebo co konkrétně je problém, to jsem nehledal. Každopádně navrácení korektního data okamžitě problém vyřešilo.

.NET 4 MCP Certification Exams 70-519 (MCPD: Web) & 70-516 (TS: Accessing Data) – První dojmy z beta exams

Měl jsem příležitost zúčastnit se beta programu nových certifikačních zkoušek Microsoftu pro platformu .NET 4, nedá mi to tedy, abych se s Vámi nepodělil o první dojmy (výstup je naštěstí již značně cenzurován, za ty dva dny už jsem trochu vychladl a nepublikovatelný proud mého hodnocení dopadl jen na prvních pár lidí, které jsem potkal).

Exam 70-516: TS: Accessing Data with Microsoft .NET Framework 4

První zkouška, kterou jsem testoval, byla zkouška na datové přístupy z kategorie Technical Specialist. Dle očekávání a zaměření se jednalo o „kodérskou“ zkoušku, kde nešlo o nějaké koncepční myšlení, ale otázky směřovaly většinou na konkrétní code-snippety, nebo jiné coding techniky pro přístup k datům. V podstatě se vše točilo kolem následujících témat:

  • Entity Framework – odhadem 40%
  • LINQ, LINQ to SQL – odhadem 20%
  • pure DB Access (DbConnection, DbCommand, …) – odhadem 10%
  • „old fashion“ (DataSet, DataTable, TableAdapter, …) – odhadem 10%
  • ostatní všechno možné (XML, ADO.NET Data Services, Sync Services, konfigurace, …) – odhadem 20%

V zásadě se jedná o standardní zkoušku tohoto „kodérského“ typu, kde se opět objevilo pro mě nepochopitelné množství  otázek směřujících čistě na názvy/signatury jednotlivých metod. Něco, co v reálné praxi zcela řeší IntelliSense. Nesnáším otázky typu „Abyste udělali XY, použijete metodu: ExecuteQuery(), ExecuteQuery(true), ExecuteQuery(false) nebo ExecuteQuery<Order>()?“.
Naopak tam úplně chyběla sebemenší otázka na SqlTransactions, T-SQL, SQL-injection, apod., kteréžto znalosti bych od člověka certifikovaného na Data Access očekával (narozdíl o detailů o předávání Table Parameters nebo Spatial Data z kódu a podobných nuancí, které si každý snadno najde, když je potřebuje).
Celkové zkoušku hodnotím jako standardního následovníka dosavadních MCP kodérských zkoušek, kde Microsoft/Prometric nedokázali překonat svůj stín a místo, aby se soustředili na skutečné ověření dovedností vývojáře potřebných v každodenní praxi, tak šlo opět o koncentraci na novinky a okrajová témata, které jsou zrovna „in“. Člověk, který takovou zkoušku úspěšně absolvuje, není vůbec ověřen na základní koncepty přístupu k datům, spíše se dokázal připravit na požadavky zkoušky způsobem, který mu umožnil ji absolvovat (ať už pomocí zkušebních testů, uniklých otázek, nebo tvrdým biflováním faktů), nicméně stejně nelze úspěšně předpokládat, že by si běžný vývojář detaily, které jsou předmětem zkoušky zapamatoval déle než potřebný půlden.

Exam 70-519: Pro: Designing and Developing Web Applications Using Microsoft .NET Framework 4

Druhá zkouška, kterou jsem testoval, byla z kategorie Professional Developer pro Web Development. Zkouška by se měla zaměřovat na koncepty a znalost technologie, prakticky bez kódování. V hodnocení této zkoušky jsem bohužel mnohem radikálnější, točila se totiž celá kolem následujících témat:

  • MVC – odhadem 50%
  • ASP.NET Core Infrastructure – odhadem 25%
  • WebForms – odhadem 10%
  • Ostatní (Data Access, WCF, Silverlight, jQuery, …) – odhadem 15%

Totální zahlcení problematikou MVC mě velmi nemile překvapilo. Nikdy jsem neměl nic proti lidem, kteří se rozhodli věnovat této technologické masturbaci (dovoluji si vypůjčit trefné označení kolegy Michal Altaira Valáška), ale kdo v Microsoftu/Prometric došel k závěru, že pro testování dovedností samostatného webového vývojáře (dovedností relevantních pro běžnou praxi!), je nutné tak silně zdůraznit nové MVC a prakticky zcela opustit WebForms přístup, to mě hlava nebere.
Toto mě znechutilo natolik (a tento feedback, že by se měly oddělit zkoušky na MVC a Webforms, jsem dával do Microsoftu už dávno v dobách, kdy ještě bylo co měnit), že odsuzuji tuto zkoušku jako absolutně irelevantní vzhledem k hodnocení reálného webového vývojáře. Pokud bych měl posuzovat jeho dispozice a dovednosti pro reálnou praxi vývoje webových aplikací, tato zkouška by mi toho mnoho neřekla. Bohužel i těch několik otázek, které by tématicky patřily do podobné zkoušky, bylo položených tak, že často vůbec nesměřovaly k jádru věci, ale jednalo se např. o vyloučení zcestných odpovědí, aby zůstaly ty méně špatné. Když se Vás někdo zeptá, které dva druhy ovoce byste doporučili někomu, kdo má rád sladkosti, tak Vám z nabídky „okurky“, „igelit“, „brambory“ a „mramor“, nezbývá než zaškrtnout… (ne, bohužel tlačítko WTF testovací aplikace nenabízí a co považují autoři za správnou odpověď se můžeme jenom dohadovat).

IIS: Jaký w3wp.exe patří k jakému AppPoolu?

Na IIS6 existoval ve složce System32\ jednoduchý skript k vypsání seznamu worker-procesů a jejich příslušnosti k jednotlivým application poolům IIS:

iisapp.vbs

Na IIS7 už tento skript není, ekvivaltentní příkaz z System32\inetsrv\ však je

appcmd list wp

image

Code Contracts Editor Extensions – konečně contracty v Intellisense tooltipech

Samotné Code Contracts se díky pomalému rewritingu (a ještě pomalejší statické analýze, ale u té je to logické) v praxi stávaly problémem, kdy nejeden vývojář pochyboval, jestli je ochoten obětovat své pohodlí rychlosti buildů na oltář Code Contractů.

Microsoft konečně přichází s dalším logickým krokem, na který všichni tak dlouho čekají, a který by mohl pomyslné váhy opět lehce převážit ve prospěch Code Contracts – po instalaci Code Contracts Editor Extensions (doplňku do Visual Studia 2010) se Vám contracty budou zobrazovat v tooltipových nápovědách IntelliSense.

Bezpečnostní chyba v ASP.NET a workaround s customErrors k jejímu vyřešení

V ASP.NET byla objevena (a zveřejněna!) bezpečnostní chyba, která sofistikovanějšímu útočníkovi umožní získat obsah zdrojových souborů uložených na webovém serveru, včetně web.configu. Podrobnosti popisuje ve svém blog-postu Scott Guthrie. Workaround spočívá v zapnutí customErrors bez rozlišování typu chyby.

Kdo by to chtěl vidět na vlastní oči, tak na YouTube je pěkné video.

Exchange 2010: Pomalý relay (MaxAcknowledgementDelay)

Po upgrade na Exchange 2010 se razantně zpomalil relay mailů z našich aplikací skrz Exchange (SMTP forwarding).

Jak se ukázalo, řešením je přepínač MaxAcknowledgementDelay na příslušném receive-connectoru:

Set-ReceiveConnector "Connector Name" -MaxAcknowledgementDelay 0

MaxAcknowledgementDelay určuje, jak dlouho může Exchange zdržet session, aby jí oznámil výsledek odeslání. Oficiální dokumentace říká:

The MaxAcknowledgementDelay parameter specifies the maximum period the transport server delays acknowledgement until it verifies that the message has been successfully delivered to all recipients. When receiving messages from a host that doesn’t support shadow redundancy, an Exchange Server 2010 transport server will delay issuing an acknowledgement until it verifies that the message has been successfully delivered to all recipients. However, if it takes too long to verify successful delivery, the transport server will time out and issue an acknowledgement anyway.

Osobně to laicky interpretuji tak, že Exchange se při relayingu snaží přijatý mail rovnou i odeslat, tak, aby té iniciující session rovnou oznámil, jestli se to podařilo. A výše uvedený časový limit říká, jak dlouho na to Exchange má, jinak inciující session pokračuje, aniž by se o výsledku odeslání přímo dozvěděla. Nastavením na 0 se řekne, že odesílající aplikace nemá zájem se problém dozvědět hned, ale holt kdyžtak dojde na NDR (Non-Delivery-Report).

Každopádně odesílání 13.000 mailů našich newsletterů z business.center.cz se z hrůzostrašného tempa 1 mail/3-10 sec vrátilo na původní čísla známá z Exchange 2007, tedy zhruba 30 minut na všechny maily (což mimochodem není nic proti dávným dobám, kdy jsme používali Merak Mail Server, a ten to dokázal převzít do fronty zhruba za 5 minut, ale to je holt jiná kategorie).

Exchange 2010: Přístup Domain Admins na ActiveSync (Error 0x85010004, InvalidPolicyKey)

Pokud Vám ActiveSync hlásí chybu 0x85010004 a jste Domain Admins, pak vězte, že jedna z tajnůstek Exchange 2010 říká, že Domain Admins účty mají tento přístup zakázaný.

Obejít se to dá takto:

  1. Vezměte Active Directory Users and Computers konzoli
  2. Přepněte si režim na View / Advanced Features
  3. Odeberte uživateli skupinu Domain Admins, OK
  4. Otevřete znovu uživatele a na záložce Security jděte na Advanced a zaškrtněte Include inheritable permissions from this object’s parent, OK, OK, OK
  5. Přidejte si zpět Domain Admins
  6. …a Active Sync jede

Lenovo ThinkPad X201 první dojmy po týdnu

Pořídil jsem si před týdnem nový notebook Lenovo ThinkPad X201. Jde o 12″ notebook z kategorie ultra-portable, který nahradil můj dosavadní Acer TravelMate 6292. Na 12″ jsem tedy zvyklý, jako hlavní počítač mám klasické PC.

Původně jsem pokukoval po Dellu, ale ty jsou ve 12″ o generaci zpět a o řád dražší (sleva se z nich dá vydyndat velká, ale tady by museli jít na 40%, aby vůbec byly konkurenceschopní).

X201 jsem koupil za cenu cca 31.000 Kč včetně dockovací stanice, a hned jsem v něm vyměnil disk za SSD OCZ Summit 120 GB, který jsem za vzal ze svého velkého PC a do něj si koupil novější SSD Intel. Samozřejmě jsem vyházel předinstalovaný OS s haldou bordelu a instaloval čisté Windows 7 64-bit EN, i když jsem do nich nakonec docela dost původních driverů a utilit Lenovo doinstaloval (neinstaloval jsem třeba Toolbox).

Po týdnu nepřílliš intenzivního používání jsou moje první dojmy tyto:

+ váha – važí zhruba 1.5kg, což je prostě bezva,

+ DVD-RW v dockovací stanici je fajn, určitě sebou nepotřebuji vláčet optickou mechaniku, ale doma, kde jiný počítač nemám, se hodí,

+ výdrž baterie vypadá na něco kolem 4-5 hodin podle jasu displaye; UPDATE: Dnes jsem s vypnutou WiFi pracoval 4 hod v kuse s Wordem a baterie za tu dobu klesla ze 100 na 50%. Výdrž tedy vypadá dost dobře…

+ konektivita – WiFi chodí luxusně a vestavěné 3G jsem zkoušel jen krátce, ale v kanceláři jsem natočil tuším 1800/400kbps na Vodafone

+ rychlost – velmi slušná

+ nezahřívá se

+/- klávesnice – má plnou velikost a dobré rozložení, je ale dost tvrdá a ještě jsem si nezvykl na rozložení (Esc, PgUp/Down, Fn/Ctrl), zatím s ní dost bojuji, uvidíme

+/- provedení – jde o ThinkPad klasiku, takže matná kvalita náchylná na poškrábání, baterie potřebovala podlepit, aby se nekvrdlala, prostě obvyklý bytelný ThinkPad s obvyklými mouchami. Překvapilo mě jenom nepřesvedčivé spasování víka, které se při otevírání kroutí a rozevírá

+/- display – displaye ThinkPadů nepatří mezi elitu, nicméně žádné problémy nepozoruji a zatím jsem jen subjektivně trochu bojoval s ClearType, nebo spíše té rozmazanosti písma v Lenovo utilitách

– malý touchpad – díky horním tlačítkům pro trackpoint na touchpad moc místa nezbylo

– chybí samostatné tlačítko na zapnutí/vypnutí WiFi, buď se dá vypínat společně s 3G/BT, nebo na více kliknutí, což bylo u Aceru lepší

– nemá HDMI

– při připojení na monitor přes dockovací stanici nepříjemně pobrukuje při aktivitě (jako kdyby vrčel disk, kdyby to nebylo SSD), bez docku jsem to ještě nezkoušel, ale při noční práci to v úplném tichu nepříjemně ruší

– při připojení na monitor přes dokovací stanici obraz velmi často na monitoru problikává, nějak se nechytá synchronizace, nebo co. Dělá to při DVI i při VGA připojení. Spolehlivý workaround: Stačí na chviličku přepnout režim na Duplicate (Win+P) a pak zase zpět na Projector only. Blikání přestane.

– dokud si nevypnete Power Management na grafickém rozhraní (Intel), tak při práci na baterie občas při změně obsahu obrazovky LCD najednou velmi přepálí kontrast (jestli si dobře pamatuju projev). Hlásí to davy uživatelů a jediným nalezeným workaroundem je vypnutí PM na grafice.

…uvidíme, jak se osvědčí dále.

iPad: Vypadávání DNS po probuzení ze spánku

Můj první problém s manželky iPadem spočíval v tom, že po probuzení ze spánku nefungovalo DNS resolvování.

Přímý přístup přes IP adresy šel. Pomáhalo odpojení/připojení do sítě nebo restart.

Co jsem tak vygooglil, tak je to known-issue a první doporučení vedlo na nastavení OpenDNS serverů místo vlastního lokálního DNS. To nepomohlo, pomohlo až vypnutí Automatic Brightness displaye(doufám definitivně, zatím to chodí, DNS jsem vrátil na svou obvyklou).

Prý je stejný problém i na iPhonech, nevím, ten nemám.