aadnk Skrevet 19. juni 2007 Del Skrevet 19. juni 2007 Det er ikke til å stikke under en stol at det produseres daglig uhorvelige menger horribel kode, hvorav størsteparten akkumulerer dypt i noen mammuter av proprietære programmer og står ansvarlig for 17% av dødsfallene i programvareindustrien - nesten mer enn Dilbertske bosser og Windows Vista tilsammen. Joda, seriøse foretak har jo alltids en testavdeling oppnevnt med en svoren ed om å bekjempe denne styggsaken. Men, når en gjeng med underbetalte droner, enten de er automatiserte eller indiske, taster i vei på jakt etter insekter, er det ikke til å unngå at mangt lurer seg forbi mengden, for aldri å se dagens lys igjen (Linus' lov, anyone?). Skjønt, det kan diskuteres hvor mye relevans dette har i en industri der majoriteten anser 'testing' for å være et fremmedord. Å våge seg inn i, eller arbeide med, denslags kodebaser (ja, sågar i sine egne støvsamlere), selv med den intensjon å lese, kvikt refaktorere og vinne, er et oppdrag mang en mann har måttet gi tapt med. I lys av dette mener jeg det er det viktig for de overlevende å dele sine skrekkhistorier med sine likemenn, og dermed endelig bli helbredet. Enn så viktig er det at en poster eksempler en ikke nødvendigvis er knyttet til, slik vi andre kan lære å unngå det. Selv har jeg så smått begynt å komme meg etter å ha lest følgende historie i disse (PDF-warning) memoarene fra en kompatibilitetstester i Microsoft. Snakk om å voldta sine medprogrammer: Klikk for å se/fjerne innholdet nedenfor THE INTIMATE PARASITE OF SOUND RECORDER The multimedia team found a "Learn to speak English" program for native speakers of another language, let's say, Italian. The program was a very intimate parasite of 16-bit Sound Recorder. The more you studied it, the deeper the problem went. The first problem was relatively straightforward: The program wants launch Sound Recorder and uses the 16-bit filename, SOUNDREC.EXE. Windows 95 converted the Sound Recorder to a 32-bit program and correspondingly renamed it to SNDREC32.EXE to be consistent with Windows NT. A simple matter of renaming the binary back to its 16-bit name took care this. One layer of the onion has been peeled. After fixing that first problem, the program still didn't work. After launching Sound Recorder, the program goes looking for the window by its caption. First, it tries the English title (in case you're running English Windows), then the Italian title (since most of their customers are running Italian Windows). Hey, at least the program doesn't assume English exclusively. Of course, native Italian speakers who live in France and wish to learn English are out of luck, but that's not our problem. Windows 95 changed the window caption include the name of the file being recorded — this change made the program unable to find the copy of Sound Recorder it had just launched. We changed the 16-bit Sound Recorder so that its window caption exactly matches the name it had in Windows 3.1, and the program finally manages to run.And then we found that the program never even uses Sound Recorder. If it never uses Sound Recorder, why does it care so much about it? Well, it does use Sound Recorder, but only under certain conditions. For normal usage, it uses a custom control to play sounds, but if you don't have a sound card, it ships the SPEAKER.DRV driver, which plays sound out the tinny PC speaker. This is a synchronous driver, and the program's custom control doesn't support synchronous drivers, so the programmers hunted around for something that does, and they found Sound Recorder. Send some keystrokes to Sound Recorder to control playback, and there you have your synchronous playback control. But if you watch carefully, you can see a copy of Sound Recorder flash onto the screen for a split second, and then it turns into a sliver at the left-hand side of the screen. What's going on? The programmers didn't want that copy of Sound Recorder to be visible. But because they didn't know how to hide a window, they did the next best thing: They moved it off the screen. Well, mostly off the screen. Because saying that it "moves it off the screen" gives the program too much credit. What the programmers actually did was simulate mouse clicks and mouse motion in order to drag the Sound Recorder window across the screen until it has gone as far to the left as it can, at which point they figure, "Well, it's off to the side. Hopefully, nobody will notice." Ja, dette er min type humor. Ellers kan en jo også finne et par godbiter på WorseThanFailure. Men, over til saken: Har dere noe liknende på lager? Lenke til kommentar
GeirGrusom Skrevet 20. juni 2007 Del Skrevet 20. juni 2007 Jeg har bare en historie om et program som et selskap hadde kjøpt et program for å styre video ut til hardware switch. Programmet var skrevet i C++ med en liten del av grensesnittet skrevet i C# Hele programmet kunne fint blitt skrevet i C# og de hadde sluppet alle problemene. De som solgte det, garanterte at det lot seg kompilere, noe det ikke gjorde, da de hadde byttet ut ATL:: med WTL:: flere steder, pluss at de hadde en halveis implementert kopibeskyttelse som måtte vekk, siden programmet ikke ville starte uansett hvis det var med i koden. Koden var fullstendig udokumentert, og med ATL ble dette et helvete å finne ut av, siden mutliple inheritence og templates kan gjøre kode ganske frustrerende. Dette prosjektet fikk meg til å innse hvor utrolig ubrukelig C++ er tl å lage GUI. Dette var kanskje ikke morsomt, men var ganske frustrerende for meg når jeg holdt på med det. Lenke til kommentar
Kahuna Skrevet 20. juni 2007 Del Skrevet 20. juni 2007 Da jeg gjorde ingeniøroppgaven min for 12 år siden brukte jeg en del tid på å programmere en mikrokontroller (tror det var en 8052 ) og ting ble *ikke* lettere av at instruksjonsettet hadde Increment Data Pointer men manglet Decrease Data Pointer... Lenke til kommentar
Terrasque Skrevet 17. juli 2007 Del Skrevet 17. juli 2007 Husker en fin kode jeg fant igjen i noe gammel delphi kode jeg hadde skrevet for lenge siden. (bla er en checkbox, og bla.checked var en boolean, false/true) if bla.checked = true then bla.checked = false; else if bla.checked = false then bla.checked = true; pent, ikke sant? Det ble om til bla.checked = not bla.checked; Lenke til kommentar
GeirGrusom Skrevet 17. juli 2007 Del Skrevet 17. juli 2007 (endret) Husker jeg brukte Xor til å begynne med også..... bla.Checked = bla.Checked Xor True (VB6) vi har alle vært noobs engang ja.... edit: det var ikke VB6, det var en VB 3 eller 5 Endret 17. juli 2007 av GeirGrusom Lenke til kommentar
Emancipate Skrevet 17. juli 2007 Del Skrevet 17. juli 2007 Bruker 1: WaitWindowEvent() freezes my software until it receives events! Makan. Hva betyr wait mon tro? Lenke til kommentar
j000rn Skrevet 18. juli 2007 Del Skrevet 18. juli 2007 (endret) https://www.diskusjon.no/index.php?showtopi...dpost&p=9098624 Den har blitt redigert et par ganger nå. Her er første versjonen: dim a a = 1 to 5 webbrowser1.document.all("o").setattribute("value",textbox1.text) next if webbrowser1.document.all("click").invokemember("click") then a = 5 to 5 end if Og en annen versjon: dim a for a = 1 to 5 as string webbrowser1.document.all("o").setattribute("value",textbox1.text) next if webbrowser1.document.all("click").invokemember("click") then for a = 5 to 5 else for a = 1 to 5 end if next next Endret 18. juli 2007 av jorn79 Lenke til kommentar
LordEirik Skrevet 18. juli 2007 Del Skrevet 18. juli 2007 (bla er en checkbox, og bla.checked var en boolean, false/true) if bla.checked = true then bla.checked = false; else if bla.checked = false then bla.checked = true; Been there! I mine første dager med programmering of Delphi 5 klarte jeg å skrive 'Edit1.Text' istede for Edit1.Text, tok meg lang tid å finne feilen Lenke til kommentar
Emancipate Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 Meg: Strengene vil jo ikke bli frigjort med den koden! Tåpe: Det tar xxx's garbage collector seg av. Meg: Xxx har jo ikke garbage collector... Tåpe: Åh, det visste jeg ikke. Kanskje de burde lage en garbage collector da? Greit nok, bortsett fra denne fyren har skrevet og utgitt en bok om programmeringsspråk xxx! Lenke til kommentar
j000rn Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 Meg: Strengene vil jo ikke bli frigjort med den koden!Tåpe: Det tar xxx's garbage collector seg av. Meg: Xxx har jo ikke garbage collector... Tåpe: Åh, det visste jeg ikke. Kanskje de burde lage en garbage collector da? Greit nok, bortsett fra denne fyren har skrevet og utgitt en bok om programmeringsspråk xxx! 9100745[/snapback] Hva er XXX? Lenke til kommentar
GeirGrusom Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 https://www.diskusjon.no/index.php?showtopi...dpost&p=9098624 Den har blitt redigert et par ganger nå. Her er første versjonen: dim a a = 1 to 5 webbrowser1.document.all("o").setattribute("value",textbox1.text) next if webbrowser1.document.all("click").invokemember("click") then a = 5 to 5 end if Og en annen versjon: dim a for a = 1 to 5 as string webbrowser1.document.all("o").setattribute("value",textbox1.text) next if webbrowser1.document.all("click").invokemember("click") then for a = 5 to 5 else for a = 1 to 5 end if next next 9098810[/snapback] Mye å ta tak i, i denne lille koden... Hvorfor skal alle nybegynnerne drive med den WebBrowser kontrollen? ser virkelig ikke fasinasjonen.... Lenke til kommentar
aadnk Skrevet 19. juli 2007 Forfatter Del Skrevet 19. juli 2007 Hvorfor skal alle nybegynnerne drive med den WebBrowser kontrollen? ser virkelig ikke fasinasjonen.... 9102824[/snapback] Nå ... det gjelder vel strengt tatt bare kopikattene med Nordic Mafia-interesser (og andre MMORPG-spill) som har spammet ned VB-kategorien i det siste. Når en kun har slikt for øye, er nok den aller simpleste metoden (WebBrowser-kontrollen) det eneste alternativet. Ikke at det dermed sagt er noe galt i å benytte kontroller til sådant, men koden, vel, den sier sitt. Lenke til kommentar
aadnk Skrevet 19. juli 2007 Forfatter Del Skrevet 19. juli 2007 PureBasic. 9102651[/snapback] Ah (tror ikke det er uriktig å informere om hvilke bøker en muligens bør unngå). Lenke til kommentar
j000rn Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 Ikke at det dermed sagt er noe galt i å benytte kontroller til sådant, men koden, vel, den sier sitt. 9103530[/snapback] For å være helt ærlig bryr jeg meg ikke noe om hvilken kontroller de bruker eller hva de skal lage. Det jeg syntes er irriterende er at de ikke har lyst til å LÆRE å programmere, de skal bare ha en ferdig løsning. Og dette syntes jeg særlig du (aadnk) er dårlig til å hjelpe dem med. Dvs. god til å gi dem det de vil ha, men ikke god til å gi dem det de trenger. Istedenfor å skrive kode for det de trenger hjelp til så gi dem et par hint. Da prøver de selv og lærer faktisk noe mer enn å copy/paste kode... Ikke minst lærer de å prøve selv istedenfor å mase om "koden" til hver bidige lille ting. Og dem som maser om WebBrowser1 og skriver inn den koden som jeg post'et over bør KUN få en link til en tutorial eller en VB for Dummies bok. Vi skal IKKE skrive FOR-løkker og IF-settninger for dem fordi de ikke har giddet å gjøre en dritt selv. Lenke til kommentar
Emancipate Skrevet 19. juli 2007 Del Skrevet 19. juli 2007 PureBasic. 9102651[/snapback] Ah (tror ikke det er uriktig å informere om hvilke bøker en muligens bør unngå). 9103607[/snapback] Det er kun én bok om PureBasic. Men den skal visstnok være dugelig nok. Lenke til kommentar
Jaffe Skrevet 21. juli 2007 Del Skrevet 21. juli 2007 *klappe for jørn* 9103854[/snapback] *slenge seg på* Lenke til kommentar
krigun Skrevet 31. juli 2007 Del Skrevet 31. juli 2007 (endret) http://worsethanfailure.com har endel slike. For eksempel: Today’s code was uncovered in a web application and attempts to solve the well-known problem of DateTime.Parse: in the event that the method fails the first time, it will probably correctly parse a string the tenth time. DateTime DateTimeParseSafe(string s) { return DateTimeParseSafe(s, 0); } DateTime DateTimeParseSafe(string s, int iter) { DateTime returnVal = DateTime.MinValue; try { returnVal = DateTime.Parse(s); } catch { if (iter < 10) { iter++; returnVal = DateTimeParseSafe(s, iter); } } return returnVal; } WTF? Feilen som tok meg desidert lengst tid å finne var i en skoleoppgave for lenge siden. Skulle lage noen Session Beans i JBoss, og når vi testet løsningen så gikk CPU bruken på serveren til himmels. Tror det tok oss noe i nærheten av 8 timer å finne følgende feil (bare eksempelkode): int t = 10; while(t > 0); { System.out.println(t); t -= 1; } Gyldig Java kode, noen som ser problemet? Endret 31. juli 2007 av krigun Lenke til kommentar
GeirGrusom Skrevet 31. juli 2007 Del Skrevet 31. juli 2007 (endret) Ah, det tok litt tid før jeg så det selv på den lille koden der. Edit: Men sier ikke java compileren ifra om dette da? Semikolon etter while, for og if er jo noe som man sjeldent bruker. Endret 31. juli 2007 av GeirGrusom Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå