Gå til innhold

Post dine WTFs fra programmeringsverden


Anbefalte innlegg

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
Videoannonse
Annonse

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

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
  • 4 uker senere...

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

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 av jorn79
Lenke til kommentar
(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! :D

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 :blush:

Lenke til kommentar

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
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
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]

:cry:

Mye å ta tak i, i denne lille koden...

 

Hvorfor skal alle nybegynnerne drive med den WebBrowser kontrollen? ser virkelig ikke fasinasjonen....

Lenke til kommentar
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. :scared:

Lenke til kommentar
Ikke at det dermed sagt er noe galt i å benytte kontroller til sådant, men koden, vel, den sier sitt.  :scared:

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
  • 2 uker senere...

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 av krigun
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...