[w32] hoe ervan 'zeker' te zijn dat je software werkt

Pagina: 1
Acties:

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 19-03 00:48

ZaZ

Tweakers abonnee

Topicstarter
zelf ben ik nogal bezig om in mijn vrije tijd tooltjes enzo te schrijven voor andere programma's.
ik heb nu een klein succesje geboekt wat dit jaar al meer dan 100.000 keer gedownload is .
bij de meeste werkt het allemaal prima, maar toch (het kan ook niet anders) gaan het soms op zijn bek.
nu komt dat gedeeltelijk doordat er geen totale toewijding is enzo, maar ook omdat er dingen gewoon erg vaag zijn terwijl die mensen allemaal dezelfde versie van het programma gebruiken.
voorbeeldje:
register keys..
bij sommige worden ze zo opgeslagen
blah\blah\blah.exe
bij andere weer zo
blah/blah/blah.exe
en soms zelfs zo!
blah\blah/blah.exe

wat is daarvan de reden!? zo zijn er nog veel meer eigenaardigheden. is er een lijst met bekende dingen waar je het beste rekening mee kunt houden zodat je zo min mogelijk support hoeft te geven als je iets gewoon voor de lol released?
testen op alle OS'en is namelijk niet genoeg.

Lekker op de bank


Verwijderd

ZaZ schreef op zondag 01 mei 2005 @ 10:05:
voorbeeldje:
register keys..
bij sommige worden ze zo opgeslagen
blah\blah\blah.exe
bij andere weer zo
blah/blah/blah.exe
en soms zelfs zo!
blah\blah/blah.exe

wat is daarvan de reden!?
Ik kan niets verzinnen. Windows gebruikt geen forward slashes.
ZaZ schreef op zondag 01 mei 2005 @ 10:05:
zo zijn er nog veel meer eigenaardigheden. is er een lijst met bekende dingen waar je het beste rekening mee kunt houden zodat je zo min mogelijk support hoeft te geven als je iets gewoon voor de lol released?
testen op alle OS'en is namelijk niet genoeg.
Defensief programmeren is the key. Zo kun je imo sneller fouten/bugs opsporen.

[ Voor 4% gewijzigd door Verwijderd op 01-05-2005 13:13 ]


  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

Verwijderd schreef op zondag 01 mei 2005 @ 13:12:
Ik kan niets verzinnen. Windows gebruikt geen forward slashes.
Standaard niet nee, maar het kan wel :)
En als je linux programma's gebruikt die geport zijn kun je er meestal vanuit gaan dat hij forward slashes verwacht. Of dat slim is, is een 2e, maar het kan soms handig zijn als je bijv. c:\new hebt, dan is c:/new een stuk makkelijker te parsen :P

God, root, what is difference? | Talga Vassternich | IBM zuigt


Verwijderd

@TS: Ik vind je post nogal vaag. Kun je wat specifieker zijn?

• Een succesvol tooltje (interessant, kun je eens linken?)
• Wat doet het?
• "Het" werkt niet (wat niet?
• Dingen zijn erg vaag (wat voor dingen?)
• Bij sommige worden ze zo opgeslagen (wat voor sommige? Programma's? Van andere programmeurs? Bestaande? Nieuwe? In ontwikkeling zijnde?)

Kortom, waar wil je heen met je post?

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Ga in haskell programmeren, niet dat je code dan foutloos wordt, maar het haalt wel ontzettend veel fouten eruit.

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
chris schreef op zondag 01 mei 2005 @ 16:38:
Ga in haskell programmeren, niet dat je code dan foutloos wordt, maar het haalt wel ontzettend veel fouten eruit.
Ik denk dat dit weinig nut heeft voor het schrijven/lezen van registerwaarden, dit zijn toch string die je zelf invoert of uitleest.. Daarbij moet je een hele nieuwe programmeertaal leren die niet eens vergelijkbaar is met de reguliere talen zoals C/C++ en Java.

Het is waar dat je in haskell gedwongen wordt de juiste types e.d. te gebruiken, maar ook in haskell kun je fouten maken (in de implementatie).

If I can't fix it, it ain't broken.


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 19-03 00:48

ZaZ

Tweakers abonnee

Topicstarter
Allereest sorry dat ik wat traag reageer, maar er zijn ineens een zooi dingen die er nu tussen komen.
Verwijderd schreef op zondag 01 mei 2005 @ 13:12:
[...]

Ik kan niets verzinnen. Windows gebruikt geen forward slashes.
nee zover ik weet doet Windows dat normaal gesproken niet. het gaat ook maar om een klein deel.
van de 100.000 heb ik maar ongeveer 10 bugreports gekregen mbt slashes. maar toch...
dan ga ik me afvragen wat het zou kunnen zijn. ik heb het iig nooit geleerd hoe je zoiets moet voorkomen.
Defensief programmeren is the key. Zo kun je imo sneller fouten/bugs opsporen.
jep idd. maar als je in je vrije tijd voor de grap tooltjes schrijft neem je iets meer risicos.
in mijn geval gaat het bijvoorbeeld om files op te slaan en op te vragen uit het register, en daar kan natuurlijk geen forward slash inzitten. dus kan je ervan uitgaan dat het een backslash moet zijn.
maar toch is het eigenlijk te bespottelijk voor woorden dat deze aanpak heel soms nodig blijkt te zijn.
Verwijderd schreef op zondag 01 mei 2005 @ 14:16:
@TS: Ik vind je post nogal vaag. Kun je wat specifieker zijn?
ik zal het proberen :)
• Een succesvol tooltje (interessant, kun je eens linken?)
sorry, maar ik wil hier niet gaan lopen pimpen. is ook niet echt relevant lijkt me
het was meer om aan te geven dat het bij het grootste gedeelte goed gaat (lees: bij bijna iedereen), en bij een paar hele rare dingen gebeuren.
• Wat doet het?
• "Het" werkt niet (wat niet?
ook is dat niet heel relevant.
en het gaat niet over een specefiek probleem waar ik niet uitkom, of zodra ik erachter kom niet op kan lossen.
maar ik leg het iets beter uit bij de volgende quote hoop ik :)
• Dingen zijn erg vaag (wat voor dingen?)
zoals bijvoorbeeld de forward slashes in het register.
maar zo ben ik ook al eens tegengekomen dat bijv files aanroepen soms wel case sensitive is.
terwijl ik hier met een simpele ShellExecute daar 'fouten' mee mag maken.
en ook op elke computer waar ik ooit zelf achter heb gezeten (met Windows dan..)
• Bij sommige worden ze zo opgeslagen (wat voor sommige? Programma's? Van andere programmeurs? Bestaande? Nieuwe? In ontwikkeling zijnde?)

Kortom, waar wil je heen met je post?
sommige mensen.
maar nogmaals: het gaat hier niet over een specifiek probleem.
hetgeen waar ik heen wil is of er een soort lijst bestaat met dingen die bij ongeveer bijna iedereen goed gaat, maar net niet bij iedereen.
sorry als ik niet heel duidelijk ben, maar dat komt ook omdat ik geen idee heb waarom 'het' heel soms niet werkt.
kan elk programma zijn dus.

een andere eigenaardigheid die ik wel eens tegen ben gekomen:
je gebruikt WritePrivateProfileString om in een INI file te poeren. werkt ook allemaal zonder problemen, maar niet echt helemaal op 1 windows95 computer.
daar lijkt het erop dat ie de waarde die je wegschrijft in een soort queue zet.
uiteindelijk schrijft ie het weg, maar wellicht later dan jij wilt of zelfs nodig hebt.
een messageboxje opgooien of de file openen in notepad is voldoende om het te processen, maar dat is nou niet echt een oplossing :)
cache flushen etc ook allemaal gedaan voor de zekerheid, maar op die ene computer werkt het gewoon niet echt lekker.
ff een stukje pseudo code
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h> 
#include <windows.h> 
 
int main() 
{
   BOOL bGelukt;

   WritePrivateProfileString (NULL,NULL,NULL,"C:\\blah.ini"); // voor de zekerheid flushen
   bGelukt=WritePrivateProfileString ("Section", "Key", "Value", "C:\\blah.ini");
   if(!bGelukt)
   {
       printf("fout");
       exit(1);
   }
    
   return(1); 
} 

daarbij gaat het dus allemaal goed, en ik krijg dan ook netjes een nonzero terug .
toch heeft ie het niet gedaan op dat moment.
als ik bijvoorbeeld de file open en gewoon in ga lezen heeft ie nog niets weggeschreven.
pas als je de file weer sluit en het daarna opnieuw gaat proberen, dan heeft ie het wel gedaan!
maakt niet uit hoe lang je wacht trouwens.
en nee, de file stond op dat moment niet open. en het rare is: waarom schrijft ie het wel weg als je een messagebox erna opgooit? :?
en alleen een bepaalde Windows95 versie lijkt hier problemen mee te hebben.

dit zijn dus een paar voorbeelden waar ik op MSDN eigenlijk niet echt iets over terug kan vinden waar ik rekening mee moet houden.
maar het feit dat ik al een paar van die eigenaardigheden tegen ben gekomen geeft me het idee dat er vast nog wel een zooi mensen zijn die zulke dingen hebben meegemaakt.
als je een programma schrijft en die aan 3 man geeft zul je waarschijnlijk niet zo snel ermee te maken krijgen.

Wellicht doe ik hier en daar wat verkeerd, en is het gedeeltelijk op te lossen door defensief te proggen.
maar dan nog.. als het bij zoveel mensen wel goed werkt maken vast meer programmeurs diezelfde fouten, en is er ook wel een soort van checklist om dit soort dingen te voorkomen.

[ Voor 4% gewijzigd door ZaZ op 02-05-2005 06:10 ]

Lekker op de bank


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Da's toch normaal? Een file is pas zeker geschreven op het moment dat je een close doet. Tot die tijd is het aan de file drivers om te bepalen of het al verstandig is om te schrijven, en is het nog niet zeker dat je het effect kunt zien.

Waarom Windows een file flush bij een message box doet weet ik ook niet. Ik gok dat het is omdat je programma dan tijdelijk onderbroken wordt en op user input wacht. Dan kun je maar beter de CPU en disk gebruiken voor taken die nog staan te wachten, zoals buffers naar disk flushen. Dat moet toch een keer gebeuren.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • The End
  • Registratie: Maart 2000
  • Laatst online: 09:19

The End

!Beginning

ZaZ schreef op maandag 02 mei 2005 @ 06:06:

[knip]

zoals bijvoorbeeld de forward slashes in het register.
maar zo ben ik ook al eens tegengekomen dat bijv files aanroepen soms wel case sensitive is.
terwijl ik hier met een simpele ShellExecute daar 'fouten' mee mag maken.
en ook op elke computer waar ik ooit zelf achter heb gezeten (met Windows dan..)

[knip]
NTFS kan case-sensitive werken. Je kan dit aanzetten door middel van een registry key. Het is alleen niet standaard en het is maar de vraag of het altijd werkt :)


Ik denk dat dit soort 'problemen' alleen voorkomen kunnen worden als je de hele MSDN + de hele DDK help uit je hoofd kent. Zelfs dan kan je niet alles weten. Een goede foutafhandeling is dus belangrijk.

  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 19-03 00:48

ZaZ

Tweakers abonnee

Topicstarter
MSalters schreef op maandag 02 mei 2005 @ 10:02:
Da's toch normaal? Een file is pas zeker geschreven op het moment dat je een close doet. Tot die tijd is het aan de file drivers om te bepalen of het al verstandig is om te schrijven, en is het nog niet zeker dat je het effect kunt zien.

Waarom Windows een file flush bij een message box doet weet ik ook niet. Ik gok dat het is omdat je programma dan tijdelijk onderbroken wordt en op user input wacht. Dan kun je maar beter de CPU en disk gebruiken voor taken die nog staan te wachten, zoals buffers naar disk flushen. Dat moet toch een keer gebeuren.
maar met WritePrivateProfileString hoef je toch niet zelf een close te doen, of mis ik ff iets:?
zelfs in een voorbeeld op MSDN doen ze niets in die richting
ze schrijven het weg, en de volgende regel lezen ze het met GetPrivateProfileString.
volgens mij doet ie dat zelf al.
je krijgt ook nergens een handle om 'm te closen

Lekker op de bank


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 19-03 00:48

ZaZ

Tweakers abonnee

Topicstarter
The End schreef op maandag 02 mei 2005 @ 10:21:
[...]


NTFS kan case-sensitive werken. Je kan dit aanzetten door middel van een registry key. Het is alleen niet standaard en het is maar de vraag of het altijd werkt :)


Ik denk dat dit soort 'problemen' alleen voorkomen kunnen worden als je de hele MSDN + de hele DDK help uit je hoofd kent. Zelfs dan kan je niet alles weten. Een goede foutafhandeling is dus belangrijk.
ah ok bedankt :) dan voel ik me weer iets minder stom.
de foutafhandeling kon erger zijn. anders was ik er denk ik niet zo makkelijk achter gekomen wat er nou mis ging :P

Lekker op de bank


Verwijderd

Het is inderdaad zo dat het schrijven van INI files onder Windows 9x gecachet wordt, en onder Windows NT niet.

Dus dat gedrag wat jij beschrijft klopt wel.

Maar ik weet niet of dat valt onder "het gaat bij de meeste mensen wel goed, maar soms niet". Het is namelijk gewoon gedocumenteerd gedrag. Hetzelfde geldt voor de forward slashes.

Nogmaals, ik vind je vraag nog steeds een beetje vaag. En ik vind het jammer dat je niet naar je tooltje wilt linken -- zolang het freeware is lijkt me dat toch geen probleem. Verder krijg ik dan misschien een beter idee van wat het geacht wordt te doen, en helpt me dat op uitzonderingsgevallen komen (en misschien ga ik het zelf wel gebruiken... :)).

Als praktisch advies: ik denk dat je dit soort problemen beter op een case-by-case basis kan aanpakken: zodra een geval zich voordoet, fixen in je tool en een nieuwe versie uitbrengen. Aangezien het meer met onwetendheid van mensen te maken heeft is het heel erg lastig te voorspellen wat er allemaal mis kan gaan...

  • The End
  • Registratie: Maart 2000
  • Laatst online: 09:19

The End

!Beginning

Verwijderd schreef op maandag 02 mei 2005 @ 11:32:
Het is inderdaad zo dat het schrijven van INI files onder Windows 9x gecachet wordt, en onder Windows NT niet.
Er staat wel in de documentatie dat onder Windows 9x de data gecached wordt, maar er staat nergens dat dat onder NT niet gebeurd. Eigenlijk is alle file IO onder NT gecached. Als je dus niet een expliciete flush aanroept, dan is die INI file misschien nog niet up to date.
Dus dat gedrag wat jij beschrijft klopt wel.

Maar ik weet niet of dat valt onder "het gaat bij de meeste mensen wel goed, maar soms niet". Het is namelijk gewoon gedocumenteerd gedrag. Hetzelfde geldt voor de forward slashes.

[knip]
Het meeste is wel goed gedocumenteerd, maar toch maak je hier altijd fouten mee. Als je b.v. de documentatie van CreateFile leest, dan wordt er naar heel veel verschillende topics gelinked. Als je dit allemaal zou lezen (wat eigenlijk zou moeten), dan is je programma nooit af.
Pagina: 1