Microsoft prutst weer eens

Door Bubbles op zondag 15 november 2009 14:26 - Reacties (23)
CategorieŽn: Programming, Rants, Views: 5.706

"What else is new?" zou je zeggen... Goed punt. Maar om toch niet helemaal flamerig over te komen of in $OS-fanboy-hokjes gepropt te worden: maak jij maar eens een besturingssysteem met zo'n brede hardware-ondersteuning en on top of that nog een shitload aan losse applicaties en ontwikkelomgevingen wat allemaal perfect werkt. Tuurlijk, sommige dingen kunnen beter of sneller worden doorgevoerd, maar andere OS-en zijn ook niet altijd rozengeur en maneschijn.

Evengoed, hier toch even wat gerant richting MS. Soms halen ze namelijk wel eens acties uit waarbij je je echt afvraagt hoe ze erop zijn gekomen om handige functionaliteit te slopen. Zo vraag ik mij nog steeds af waarom ze toch in 's-hemels' naam de pauzeerfunctie met spatiebalk uit WMP hebben gehaald. Daar gaat dit artikel echter niet over (zeker gezien het al een aantal jaren geleden is dat ze dat geintje uithaalden). Wat dan wel? Internet Explorer 8.0 en VB.net.

Even een stukje achtergrond informatie: ik werk bij een bedrijf waar ik voornamelijk werk in databases (SQL-Server 2005) maar af en toe ook wat programmeerwerk te verrichten heb. De site die ze hebben gemaakt voor hun klanten om bestellingen op te plaatsen, is gemaakt in Visual Basic. Sommige stukken VB6.0, andere VB.net 2003, 2005 of zelfs 2008. What can I say, de site is over de jaren heen uitgebreid.

Om een goede werking van de site te garanderen, is er een check ingebouwd om te kijken met welke browser er wordt ingelogd. Versie 6.0 en hoger van I.E. worden goedgekeurd. Oudere, of andere browsers krijgen een melding te zien dat ze I.E. moeten gebruiken. Ik weet het, niet ideaal, maar het is nu even niet anders. Ze zijn al een tijdje bezig om een compleet nieuwe site op te gaan zetten, maar aangezien we het hier over een internationaal bedrijf hebben, gaan zulke veranderingen nogal eens traag.

Wat is nou het geval dan? Sinds een tijdje hebben we geconstateerd dat sommige gebruikers een melding krijgen dat ze geen I.E. gebruiken, terwijl ze inloggen met I.E. 8.0. In alle gevallen dat dit gebeurde, bleek dat dit probleem ontstond nadat ze waren geupgrade van een oudere versie van I.E. naar versie 8.0. Aan mij de taak om uit te zoeken waarom het fout ging en wat eraan gedaan moest worden.

Om een probleem op te lossen, moet je eerst weten wat het probleem exact is. En in programmeergevallen is het vaak ook handig om te weten wat de veroorzaker van het probleem is, om zodoende daar rekening te kunnen houden met het schrijven van een oplossing. 'Gelukkig' waren er een paar van die probleemgevallen binnen het bedrijf zelf, dus kon ik daar op hun computers experimenteren. Na wat zoek en probeerwerk kwamen we erachter dat dit probleem ontstond door een te lange User-Agent string. De code die moest controleren op welke browser werd gebruikt, kon hier niet mee overweg en gaf "Unknown" terug, met als gevolg dat er dus een melding kwam dat de gebruiker maar eens de nieuwste versie van I.E. moest installeren.

Na wat verder zoekwerk kwamen we erachter dat (een deel van) de User-Agent string in I.E. wordt opgebouwd uit informatie die in de registry staat. Om preciezer te zijn, hier:

code:
1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform


Op die plek vind je onder andere terug welke versies van het .NET framework zijn geÔnstalleerd. Bij de probleemgevallen stonden hier zoveel versies (inclusief updates) dat de User-Agent kennelijk te lang werd voor het bewuste stuk code. Het weghalen van een paar van die entries zorgde ervoor dat deze gebruikers weer gewoon konden inloggen zonder problemen.

Dat is echter niet iets wat je even bij klanten gaat doen. Vooral omdat het klanten betreft waar je niet zomaar even langskan: ze zitten immers wereldwijd. Bovendien kan je op je natte vingers al aanvoelen dat dit probleem zich later weer gaat voordoen als MS weer eens een update van ťťn van de .NET frameworks rondstuurt. Er moet dus een permanetere oplossing komen.

Dus dan maar de code induiken en kijken waar die check zit en waarom het fout gaat. Check gevonden, maar daar kon weinig fout aan gaan. Die keek namelijk naar wat er aangegeven stond in een andere class zijn properties: System.Web.HttpRequest.Browser. En daar stond het al fout in. Ai. Dat is een stuk code wat ik niet kan aanpassen.

Dan toch eerst nog maar eens wat verder testen om te achterhalen onder welke omstandigheden het exact fout gaat. Dan blijkt, nadat ik alle vorige versies van I.E. tot en met versie 3 terug op de computer erbij had geÔnstalleerd en ik mijn registry wat had aangevuld, dat het bewuste stukje code alleen over de zeik gaat als I.E. 8.0 gebruikt wordt. Alle andere browsers stuurden exact dezelfde UserAgent string mee (op versienummer na, natuurlijk) en het stuk code accepteerde in die gevallen probleemloos de (hoeveelheid) data die erin stond.

Kennelijk haalt I.E. 8.0 toch nog iets extra uit met die string. Ik heb al ergens gelezen dat het een linefeed zou zijn, wat die code dus niet zou snappen (en terecht overigens). Ik heb overigens al een workaround in gedachten waarbij ik de System.Web.HttpRequest.UserAgent string zelf ontleed. Die is namelijk wel gewoon correct als ik de laatste incarnatie van I.E. gebruik. En daarin staat netjes vermeld dat IE wordt gebruikt, en ook nog eens welke versie. Dat wordt dus handmatig die variabelen zetten. Toch zou ik liever zien dat MicroSoft een patch zou schrijven voor I.E. 8.0 die dit probleem oplost. Bij nader inzien bleek de oorzaak dus niet zozeer in onze code te zitten: die deed namelijk wat er van hem verwacht werd. MS heeft weer zitten prutsen en iets dat werkte stuk gemaakt. Broeva, haro!

-bubbles out-

Volgende: De groeten 12-'09 De groeten
Volgende: Struggle, pt. 4 - v2 10-'09 Struggle, pt. 4 - v2

Reacties


Door Tweakers user himlims_, zondag 15 november 2009 14:35

zoda er bij mij staat dat ik IE MOET downloaden, is het venster direct gesloten.
kan me gestolen worden wat voor site het is, of welke informatie ik zoek.
een pagina die zich richt op 1 webbroser is afgeschreven imho.

maar goed, succes met sleutelen :+

//edit - gebruik opera, kan zich ook perfect identificeren als IE ... de devvers hebben maar gewoon aan de standaarden te houden :+

[Reactie gewijzigd op zondag 15 november 2009 15:38]


Door Tweakers user Arfman, zondag 15 november 2009 15:25

^^ I'm with stupid. Het is ondertussen 2009 (bijna 2010), de tijd dat IE 95+% marktaandeel had is allang vervlogen.

Door Tweakers user GoT, zondag 15 november 2009 15:34

@himlims/Arfman:
Zij richten zich op B2B en niet B2C, als IT-professional moet je weten wat het verschil is omdat beide markten andere strategiŽen vergen en je ook veel onnodige kosten kan besparen.

[Reactie gewijzigd op zondag 15 november 2009 15:34]


Door Tweakers user NaliXL, zondag 15 november 2009 15:38

Die check die je doet klinkt mij erg onlogisch in de oren. Het lijkt mij veel logischer om te controleren of de gebruikte browser niet te oud is. Dus een DENY lijst in plaats van een ALLOW lijst.

Door Tweakers user himlims_, zondag 15 november 2009 15:39

@got; mijn werkgever richt zich ook op B2B ... en reken maar dat standaarden hoog in het vaandel staan. Je gaat wel beetje af als bedrijf als je je blind staart op 1 browser. Komt ook wel amateuristisch over. Niet in ieder bedrijfsomgeving draait alles om/op Windows en IE

[Reactie gewijzigd op zondag 15 november 2009 15:47]


Door Tweakers user Peetz0r, zondag 15 november 2009 16:11

maak jij maar eens een besturingssysteem met zo'n brede hardware-ondersteuning en on top of that nog een shitload aan losse applicaties en ontwikkelomgevingen wat allemaal perfect werkt.
Ubuntu heeft bij mij betere hardware ondersteuning dan Windows XP/Vista/7, en voor allebei zijn veel programma's en programeermogelijkheden beschikbaar.

Door Tweakers user Borizz, zondag 15 november 2009 16:42

Toch zou ik liever zien dat MicroSoft een patch zou schrijven voor I.E. 8.0 die dit probleem oplost. Bij nader inzien bleek de oorzaak dus niet zozeer in onze code te zitten: die deed namelijk wat er van hem verwacht werd. MS heeft weer zitten prutsen en iets dat werkte stuk gemaakt. Broeva, haro!
Heb je deze bug al gemeld bij Microsoft? Als Microsoft niet weet wat er mis is zullen ze het ook niet oplossen. Bugs aanmelden kan via http://connect.microsoft.com/ .

Door Tweakers user Bubbles, zondag 15 november 2009 16:48

:')
Ik ga hier niet verantwoorden waarom die website IE-only is. Ik dacht dat ik mijzelf wel genoeg had ingedekt in mijn stukje, maar kennelijk lezen sommige mensen graag alleen wat ze willen lezen.

NaliXL: dat is exact wat die check doet: alle alternatieve browsers en alle IE versies lager dan 5.5 worden geblocked. Hij gaat nu alleen dus mis omdat ie het type browser dus niet correct kan uitlezen.

Door Tweakers user jeroenr, zondag 15 november 2009 17:05

Tsja... eigen schuld, dikke bult. Je site op een beperkte hoeveelheid browsers richten is gewoon met een groot kanon op je eigen voet schieten. Tot nu toe heb je geluk gehad en gemist en nu MS weer eens om onverklaarbare wijze hun eigen "standaarden" aanpast, schiet je je voet eraf. Jammer, maar je had jaren geleden al van het "wij supporten alleen MSIE" af moeten stappen.

Door Tweakers user Fiander, zondag 15 november 2009 18:17

Behalve dat het idd niet slim is om je mogelijke markt op deze manier te beperken, is er natuurlijk ook een oplossing nodig voor dit probleem....

Op de server is de browsecap.ini al vernieuwt ?? Het komt erg vaak voor dat nieuwe browsers niet goed herkent worden als deze veroudert is.

Door Tweakers user edeboeck, zondag 15 november 2009 18:36

Jongens toch, wat een gedoe weer over een IE-only site... is dat goed? Principieel niet, maar er zijn zeker gevallen waarin dat te verantwoorden is. Punt.
Bovendien wordt er blijkbaar vlot over volgend stukje gelezen door sommigen:
Ze zijn al een tijdje bezig om een compleet nieuwe site op te gaan zetten, maar aangezien we het hier over een internationaal bedrijf hebben, gaan zulke veranderingen nogal eens traag.
Sommigen onder jullie zijn blijkbaar net wat te jong om de tijd te herinneren dat (zeker B2B) IE-only werd gebruikt omdat daar nu eenmaal veel meer mogelijk mee was (en inderdaad ja: helemaal niet conform de standaarden, maar gok eens wat het antwoord is van een baas die iets gedaan wilt krijgen en als dat "iets" niet kan volgens de standaarden...).

Disclaimer: ;)
ik ben zelf volledig overtuigd van het nut van (web)standaarden, maar sommigen missen blijkbaar wat praktijkervaring waaruit blijkt dat:
a) de baas overtuigd moet worden van die standaarden
b) als hij overtuigd is geraakt, het (vaak) veel tijd vraagt om dat ook nog om te zetten
c) er ook nog zoiets is als een historiek die je meesleept
d) en VOORAL: er vaak geen geld is/uitgetrokken wordt om dat eens conform de standaarden op te lossen.

Door Tweakers user Bubbles, zondag 15 november 2009 18:55

edeboeck: Dank voor de steun. Bijna alle andere reacties lijken aan te tonen dat ze dat stukje inderdaad niet gelezen hebben.

Misschien maar even in bold, zodat het hopelijk wel opvalt:
Ik had natuurlijk ook gewoon geen achtergrond informatie kunnen vertellen en het puur over het feit kunnen hebben dat dankzij een nieuwe versie van IE een stuk VB.net code over de zeik gaat omdat MS iets heeft gewijzigd in de afhandeling van de UserAgent string. Maar drie regels tekst staat ook weer zo knullig voor een complete blog, dan kan ik beter gaan twitteren :X Dat het om een IE-only website gaat is niet de essentie van dit artikel.

Fiander: Dank voor het constructief meedenken. :) Helaas is dat het probleem denk ik niet. IE8 wordt namelijk wel prima herkend als zodanig als die UserAgent string niet zo lang is.

[Reactie gewijzigd op zondag 15 november 2009 18:55]


Door Tweakers user Jrz, zondag 15 november 2009 19:36

Weet je zeker dat er niet in een van al die stukken vb code de System.Web.HttpRequest.Browser wordt geset?

btw.. IE-checks zijn leuk, maar wat nou als een andere browser die trident gebruikt en alles wat ie doet kan gebruikt wordt?

Door Tweakers user Jrz, zondag 15 november 2009 19:39

Overigens vind ik het alijd wel grappig om te lezen dat mensen lopen te zaniken over microsoft dat er geprutst wordt, maar ondertussen zelf een applicatien schrijven die er nog langer over doet en meer geheugen gebruikt dan heel windows :)

Door Tweakers user Bubbles, zondag 15 november 2009 19:50

Jrz: ik heb even een kleine, losstaande testapp gemaakt zodat ik beter kon testen. Was een regel of 10 aan code die ik door de debugger gooide. Daarin was heel duidelijk de fout te zien en te reproduceren.

Door Tweakers user Saffie_time, zondag 15 november 2009 19:51

Kan je met de spatiebalk niet meer pauzeren?
De ploerten waarom zouden ze dat er nu uit willen halen dat is toch uitermate handig 8)7

Door Tweakers user Jrz, zondag 15 november 2009 20:02

OK.. bubbles, als het toevallig een newline is, dan komt het (als de regel niet geescaped wordt) ook niet mee in die header regel.

Waar zijn de checks eigenlijk voor nodig? activex controls? Dat zal haast wel moeten, want de rest van dat soort 'problemen' zijn vaak redelijk eenvoudig op te lossen.

Door Tweakers user crisp, maandag 16 november 2009 00:12

Goed inside artikel over de IE useragent string: http://blogs.msdn.com/iei...ems-and-Alternatives.aspx

En via de comments blijkt het afhandelen van ua strings van langer dan 256 karakters inderdaad een known problem te zijn: https://connect.microsoft...ckID=362923&wa=wsignin1.0

Door Tweakers user durian, maandag 16 november 2009 07:13

Sommigen onder jullie zijn blijkbaar net wat te jong om de tijd te herinneren dat (zeker B2B) IE-only werd gebruikt omdat daar nu eenmaal veel meer mogelijk mee was (en inderdaad ja: helemaal niet conform de standaarden, maar gok eens wat het antwoord is van een baas die iets gedaan wilt krijgen en als dat "iets" niet kan volgens de standaarden...).
Lekker neerbuigend ben je...

Ik heb nog nooit een baas meegemaakt die zijn onkunde doordrukte nadat hij of zij uitgelegd was dat het non-standaard implementeren van iets geen goed idee is. Het is nl. alleen een goed idee op korte termijn voor jezelf, niet voor je klanten, en ook niet op langere termijn.

[Reactie gewijzigd op maandag 16 november 2009 07:13]


Door Tweakers user roy-t, maandag 16 november 2009 11:07

quote: durian
Lekker neerbuigend ben je...

Ik heb nog nooit een baas meegemaakt die zijn onkunde doordrukte nadat hij of zij uitgelegd was dat het non-standaard implementeren van iets geen goed idee is. Het is nl. alleen een goed idee op korte termijn voor jezelf, niet voor je klanten, en ook niet op langere termijn.
Hai, we hebben een legacy activeX app in onze B2B applicatie zitten, heeft ons §450.000 gekost om helemaal werkend te krijgen, is nu helemaal bug vrij en werkt goed. Maar oh nee iemand vind het slecht dat het IE only is, laten we nu al ons geld en resources in zetten om deze applicatie cross-browser te maken voordat....

Het is toch echt niet zo moeilijk om te zien dat legacy soms gewoon legacy is en dat het zonde is om dit zomaar weg te gooien. De app werk(te) goed, enige eis is dat het je er IE voor nodig had, maar zelfs de nieuwste versies van IE werken prima. Dat is net zo'n eis als "dit programma is gecompileerd voor Windows". Er zijn manieren om er voor te zorgen dat het overal werkt. Maar als je iets hebt dat al werkt op je systemen, dat goed getest is en dat mensen kennen is het echt donderszonde om dit zomaar om te gooien.

Natuurlijk is het wel verstandig om bij een eventuele nieuwe applicatie meer cross-browser te gaan, maar ik denk niet dat we dat Bubbles hoeven te vertellen :).

Door Tweakers user durian, maandag 16 november 2009 11:14

Hai, we hebben een legacy activeX app in onze B2B applicatie zitten, heeft ons §450.000 gekost om helemaal werkend te krijgen, is nu helemaal bug vrij en werkt goed. Maar oh nee iemand vind het slecht dat het IE only is, laten we nu al ons geld en resources in zetten om deze applicatie cross-browser te maken voordat....
Nee, dat bedoelde ik natuurlijk niet. Het ging er om dat die beslissing om het activeX te maken niet de goede is geweest. _Dat_ zijn de beslissingen die je moet vermijden.

(Aan de andere kant ben ik van de harde school - zo'n beslissing om een legacy app eruit te gooien is dan nu misschien duur, maar op de lange termijn is het IMHO beter. Maar helaas is lange termijn denken niet de sterkste kant van een hoop managers. (Dus mag ik later de puinhopen komen opruimen...)).

Door Tweakers user Evilbee, maandag 16 november 2009 11:22

Ik vraag me af of alle mensen die zeggen IE-only = slecht, hetzelfde zouden zeggen als een site FF-only was...

Het feit is gewoon als je een B2B website hebt je daar voor je 'klanten' eisen aan kan stellen. Wij hebben dat ook gedaan, alleen dan (in het begin) voor FF-only. Dit wordt van te voren gewoon gemeld en onze klanten gingen daar mee akkoord.
Dus waarom zouden we dan moeite (en dus geld) in een cross-browser site gaan steken als het niet nodig is?

Door Tweakers user Bubbles, maandag 16 november 2009 11:32

Juistem. (Een groot stuk van) De site is rustig zo'n 10 jaar oud. In die tijd was het vrij normaal dat je IE gebruikte. Daar is later een hoop bij aangebouwd, maar er zijn nog steeds oude stukken code die worden gebruikt.
Daarnaast is er al een behoorlijke tijd sprake dat er een nieuwe site komt, met als gevolg dat de drang om de oude site te fixen erg klein is geworden. Waarom investeren in iets wat binnenkort toch weggaat? Helaas kwam er dan laatst ineens nieuws vanuit het hoofdkantoor in Amerika dat ze hun site hier ook wilden gaan inzetten, i.p.v. een compleet nieuw systeem (dan hoefden ze in Amerika niet ook over te stappen op een nieuw systeem). Evengoed, ook die site heeft crossbrowser compatibiliteit.

We zitten alleen nu dus met een probleem. Die nieuwe site komt ergens begin volgend jaar, maar er zijn nu dus klanten die wel tegen beperkingen van de huidige site aanlopen. Dus moet er toch nog weer moeite in de oude site worden gestoken.

Reageren is niet meer mogelijk