¿Los errores más comunes de “estilo Y2K” hoy en día? [cerrado]

40

No me refiero específicamente a cuestiones relacionadas con la fecha como 2038, pero más generalmente, errores que se ajustan al patrón:

  • Hace una generación, los programadores solían escribir código que ass-u-me-d X, que era razonable en ese momento.
  • Pero las circunstancias han cambiado, y ahora X es una fuente común de problemas que deben solucionarse.

Por ejemplo:

  • X="La memoria es demasiado cara para justificar el almacenamiento de los 4 dígitos del año. No se preocupe por el 2000; está muy lejos". (roto por Y2K)
  • X="¿Quién necesita size_t ? Simplemente podemos usar unsigned int ." (roto por sistemas de 64 bits)
pregunta dan04 29.03.2011 - 08:22

24 respuestas

87

IPV4 solo código de red. Aún no ha llegado el momento de la mayoría de las personas, pero la idea de que solo las redes IPV4 se vuelven obsoletas.

    
respondido por el dan_waterworth 29.03.2011 - 08:51
76

Muchos problemas de localización se ajustan a este patrón:

  • hace una generación, los programadores asumieron que todos los caracteres pueden representarse con un tipo de datos de 8 bits
  • Hace una generación, los programadores asumieron que todo tipo de texto debería leerse de izquierda a derecha, de arriba hacia abajo
  • hace una generación, los programadores asumieron que el separador de campo en un archivo CSV es siempre el carácter de coma , (No, realmente no lo es. CSV es la extensión del archivo, no la especificación de formato de archivo. Mi conjetura es cuando CSV se inventó, en realidad era solo valores separados por comas. A medida que evolucionaba, nadie quería cambiarle el nombre a "archivo de datos tabulares con separador de columna dependiente de la localidad, campos citados para los valores de campo que contienen un carácter separador y comillas dobles para los caracteres de comillas ".)
respondido por el nikie 29.03.2011 - 14:42
41

Validadores para nombres de dominio que hacen suposiciones erróneas como:

  • TLD tiene 2-3 caracteres (no es cierto desde 2001);
  • los nombres de dominio y los TLD contienen solo caracteres US-ASCII (no es cierto desde enero de 2010);
respondido por el vartec 29.03.2011 - 13:38
35

Hice una investigación sobre y2010 durante aproximadamente 14 meses hace:

printf("200%d", year);

Lo creas o no, el código así existe.

    
respondido por el Greg Hewgill 29.03.2011 - 11:12
26

Otra de las aplicaciones que aún no se mencionan son las aplicaciones (y especialmente los sitios web) que asumen que todas las direcciones son direcciones de EE. UU. En una era donde los negocios internacionales son cada vez más vitales, esto está causando problemas. Las empresas están perdiendo negocios posiblemente lucrativos porque los clientes se encuentran incapaces de hacer pedidos.

Esto es especialmente crítico con los códigos postales / códigos postales y números de teléfono. Numerosas aplicaciones y sitios web los validan en comparación con el sistema de los EE. UU., Asumiendo incorrectamente que es el único que existe (cuando en realidad gran parte del planeta usa sistemas diferentes y hay países sin códigos postales). Un problema menor es exigir números de casas en las direcciones, cuando todavía hay ubicaciones sin ellos (pueblos pequeños) y, a veces, incluso nombres de calles.

escuché una historia el año pasado acerca de alguien en un pequeño pueblo de Francia que intentaba pedir que se instalara una línea telefónica (simplemente se estaba mudando allí) y le parecía imposible, ya que el sistema informático utilizado por el proveedor no aceptaría su dirección, que solo existía del nombre de la casa y del pueblo (sin nombre de calle, sin número de casa, sin código postal).

    
respondido por el jwenting 29.03.2011 - 15:06
21

Codificación de un solo byte (ASCII, ISO-8859-x) vs codificación de múltiples bytes (Unicode, UTF-8). Ese es el mayor problema de legado que se me ocurre. Hay tanto software que asume que la longitud del byte de las cadenas == longitud del carácter.

    
respondido por el vartec 29.03.2011 - 12:53
16

IPv4 viene a la mente. Nos estamos quedando sin direcciones IP (de hecho, puede que ya se hayan agotado, los últimos lotes se han distribuido a las autoridades regionales).

La introducción del IPv6 de reemplazo es lenta, ya que los fabricantes de hardware y software se están poniendo al día.

    
respondido por el jwenting 29.03.2011 - 09:43
15

Algo que me hizo sentir muy mal hace unos meses fue la fecha de caducidad de las cookies ...

Aparentemente, las fechas de caducidad de las cookies solo se pueden establecer en el futuro (corríjame si me equivoco en este punto, ¡no soy un experto en esto!). De todos modos, hace unos meses, un problema de inicio de sesión realmente extraño surgió con una aplicación que nuestro equipo mantenía. Pero, este fue un proyecto paralelo, y este componente de inicio de sesión fue realmente sólido, no tuvo que ser tocado en 10 años, por lo que no había nadie alrededor que supiera cómo funcionaba (nunca tuvo que tocarlo por lo sólido que era) .

De todos modos, después de medio día de excavar y perder la cabeza, me di cuenta de que había una fecha de codificación del 31 de diciembre de 2010 en una rutina de validación. Básicamente, cualquier persona que intentara usar el sistema con una cookie más nueva no pudo iniciar sesión. Resultó que esto fue un código duro en 2001, porque no pudieron establecer una fecha de caducidad de la cookie más allá de 10 años en el futuro, y el programador en ese momento era demasiado perezoso para convertirlo en una "fecha flotante".

    
respondido por el Bobby Tables 29.03.2011 - 13:12
13

Hacer cualquier tipo de aritmética de fecha (suma / resta) directamente en un entero de tiempo de época de UNIX, por ejemplo:

gmt_epoch
1301397219
March 29, 2011 11:13:39 GMT

y desea averiguar la hora correcta para la costa este de América, EST (-5: 00 GMT), por lo que hace algo como:

gmt_epoch-(5*60*60)
1301379219
March 29, 2011 06:13:39 EST

que es INCORRECTO, porque el 29 de marzo de 2011 es EDT (-4: 00 GMT).

Esto no es tanto un error de calibre Y2K, ya que no tiene que esperar 10 años para ver su efecto, pero, digamos que contrata a un programador contratado que solo está trabajando en el proyecto durante un mes aproximadamente. entonces, BAM! La cosa se rompe después de que termina el horario de verano.

    
respondido por el Jake McGraw 29.03.2011 - 13:23
12

Seguridad.

Almacenar contraseñas no lavadas, dejando "puertas traseras" en las aplicaciones, usando idiomas que tienen desbordamientos de búfer. Consulte la Top 10 de OWASP para ver la lista actual de suposiciones simples.

    
respondido por el S.Lott 29.03.2011 - 11:55
11

Soporte y uso de la zona horaria. ¿Cuántos sistemas ha visto que solo tienen dateStarted o dateCreated sin ningún reconocimiento o notación en qué zona horaria se considera la base? Esperemos que sea GMT / UTC, pero contar con eso es arriesgado en el mejor de los casos.

    
respondido por el CaseySoftware 29.03.2011 - 20:54
10

Desarrolladores (o DBA's) que asumen que el nombre de todos caen en el patrón familiar (para los ojos occidentales) de FirstName y LastName .

  • En muchos países asiáticos, el nombre de la familia tradicionalmente es el primero debido a un valor cultural que coloca las necesidades de la familia por encima de las necesidades del individuo. Escribir "Bevan Arps" puede considerarse irrespetuoso, incluso grosero.

  • En otras partes del mundo, las familias no tienen nombres: a las personas se les llama por su (solo) nombre. Si puede haber confusión, también se hace referencia a sus padres o al comercio.
    [ Aparte : Esta es también la fuente de muchos nombres de familiares occidentales como McGreggor (hijo de Greggor), Mathieson (hijo de Mathie), O'Connor (hijo de Connor), Carpenter, Smith, Butcher y Taylor.]

  • No todos los nombres tienen una ortografía larga: "N" y "O" son las palabras escritas en inglés de los nombres genuinos, pero muchos sistemas rechazan los nombres como demasiado cortos.

  • El apellido de no todos es lo suficientemente corto como para caber en un campo de 50 caracteres tampoco.

  • No todos los nombres se escriben en mayúsculas de la misma manera. Algunas personas escriben su apellido "van den ..." otras "Van Den ..." y ajustarlo es incorrecto .

respondido por el Bevan 30.03.2011 - 10:16
10

En el Reino Unido, cuando la tasa de IVA cambió de 17.5% a 15% en diciembre de 2008, fue el primer cambio a IVA desde 1991 y muchos programas tenían el valor codificado en ellos.

El cambio también significó que el sistema tuvo que separar las tasas de IVA según la fecha, porque no iba a ser tan simple como cambiar un valor constante en alguna parte.

¡Espero que todos estuvieran listos cuando volviera a cambiar (y luego aumentara)!

    
respondido por el Matthew Steeples 30.03.2011 - 10:24
8

Una suposición es que nuestro negocio no tendrá que crecer a mercados no estadounidenses (o que no hablen inglés). La internacionalización cuando has hecho todo bien para empezar es un gran proyecto. Cuando la mayoría de tus cadenas están codificadas en el código, es un proyecto mucho más grande.

También hay suposiciones que las personas hacen con respecto a los idiomas.

Puedes convertir mayúsculas y minúsculas libremente (roto en alemán, con el carácter eszet tipo beta que se convierte en dos Ss mayúsculas).

Tienes formas singulares y plurales (además, algunos idiomas tienen formas duales).

Una pulsación no modificadora produce un carácter (a un amigo mío lo golpeó un problema que ocurrió al presionar ESC después de escribir una consonante para formar la primera parte de una sílaba japonesa, ya que katakana y hiragana son alfabetos de sílabas). p>     

respondido por el David Thornley 29.03.2011 - 16:24
8

No se utiliza una biblioteca XML para escribir XML.

El nivel de frustración que obtienes al tratar con archivos XML mal formados a veces puede ser demasiado. print "<data>$value</data>"; probablemente fallará.

Hay tantas bibliotecas XML por ahí que está obligado a encontrar una fácil de usar. En serio, deja de reinventar lo que otros ya han gastado en muchos recursos. Puede pensar que sabe XML pero más cosas pueden salir mal de lo que puede esperar.

    
respondido por el 2 revs, 2 users 89%user21580 30.03.2011 - 02:54
7

La suposición del programador de que la ubicación geográfica de un usuario debe definir automáticamente el idioma preferido de ese usuario. La tecnología de IP a la ubicación no debe usarse para decisiones de idioma preferidas ... nunca. Incluso Google y Facebook son culpables de esto.

    
respondido por el Rebecca 29.03.2011 - 23:19
5

Usar un entero para almacenar la moneda en su forma mínima. Di centavos. Mañana puede usar una nueva moneda, sucedió en muchos países europeos.

Almacenamiento de tasas de IVA estáticas para categorías, etc. en tiendas web. En muchos países, las tasas de IVA se consideran estáticas, pero la idea es no tenerlas estáticas y de vez en cuando se cambian.

Almacenar números cívicos en una notación específica y usarlos como una clave (o cualquier otra cosa "clave natural"); Mañana podrías tener millones de refugiados de China, ¿su número cívico se parecerá al tuyo? (Hoy este ya es el caso en Suecia)

Suponiendo que 0 es NULL en las bases de datos. El próximo estándar SQL podría comenzar a contar desde 0, ¿quién sabe? :-)

    
respondido por el stefan 30.03.2011 - 02:20
4

Me alegro de no estar cerca del apocalipsis Y10K.

    
respondido por el gnuchu 29.03.2011 - 16:42
4

Suponiendo que una clave principal derivada de los datos de la aplicación nunca tendrá que cambiarse. El ejemplo más común es la identificación del usuario: generalmente es imposible cambiarlo, incluso si el usuario cambia su nombre.

Otros ejemplos que he encontrado - asumiendo que los códigos de país nunca cambian, los códigos de moneda, los nombres de las ciudades.

    
respondido por el ChrisWerry 30.03.2011 - 00:15
4

Procesamiento serial vs paralelo. Los procesadores de varios núcleos son o serán vistos pronto como universalmente ubicuos, con la excepción de hardware muy específico de producto o tarea.

    
respondido por el JustinC 30.03.2011 - 04:59
2

Bueno, creo que se ajusta a esta pregunta.

Básicamente, redes WiFi no seguras. Al parecer, las organizaciones de estándares de alguna manera pensaron algo como "¡Oh, solo los buenos usarán redes WiFi abiertas!", Por lo que decidieron nunca cifrarlo de ninguna manera. Quiero decir, ¿no es ese el tipo de cosas para las que se realizó el intercambio de clave de cifrado Diffie-Hellman?

Este es un gran problema hoy en día, con cosas como Firesheep que se usa bastante.

    
respondido por el Sam Bloomberg 30.03.2011 - 03:28
1

El hecho de que Y2K haya terminado no significa que los programadores hayan terminado la fecha de escritura y errores de tiempo. Hubo familias enteras de insectos que atacaron cerca y alrededor del año. 2000. Los errores de fecha y hora que continúan surgiendo siguen entreteniéndome en sus creatividad.

Si bien es viejo y se está volviendo anticuado, los siguientes disfrutaron de cierta popularidad en El plazo hasta el año 2000 y todavía tiene alguna información actualizada.

enlace

Aunque el hardware heredado finalmente muere, los formatos de datos heredados siguen y siguen.

    
respondido por el Gilbert 29.03.2011 - 20:04
-1

Contador de 32 bits en varias MIB de hardware de red. Pueden ajustarse bastante rápido y, sin embargo, en algún momento se utilizan para la facturación ...

    
respondido por el Bruno Rohée 30.03.2011 - 01:15
-4

No es exactamente el mismo, pero el número 10100401822940525 no existe en Javascript o ActionScript 3.

  

Específicamente, encontramos que el número 10100401822940525 parece simplemente no existir en estos entornos de programación. Puedes probar esto por ti mismo, simplemente rastrear o registrar las siguientes afirmaciones:   10100401822940524   10100401822940525   10100401822940524 + 1   Número ("10100401822940525")   (10100401822940525) .toString ()

     

Todas las declaraciones anteriores generarán "10100401822940524", cuando obviamente todas, excepto la primera, deben devolver "10100401822940525".

     

No hay un significado obvio para ese valor. El valor binario / hexadecimal no está cambiando ningún bit de alto nivel, y no hay resultados para él en Google ni en Wolfram Alpha. Pruebas adicionales mostraron el mismo resultado con otros números en este rango.

Misterio resuelto aquí:

respondido por el Ciaran 29.03.2011 - 09:04

Lea otras preguntas en las etiquetas