15 euros para el primero que resuelva este problema. (RESUELTO)

Iniciado por MA40, 15 Octubre 2010, 11:15 AM

0 Miembros y 1 Visitante están viendo este tema.

MA40

Hola.

Justo hace tres días publiqué en el foro de "Programación/Desarrollo Web" un mensaje solicitando ayuda para resolver un problema que, aunque no es para nada importante, me tiene últimamente algo intrigado y me gustaría resolverlo.

http://foro.elhacker.net/desarrollo_web/ayuda_para_validar_w3c_una_web-t307684.0.html

No tuve éxito en ese post (por favor leedlo), y como soy muy insistente (a veces pesado), he pensado ponerlo en el foro de desafíos, ya que éste otro foro creo que suele tener más éxito, si no, fijaros en el número de visitas de cada tema en los dos foros.

¿Y cuál es el reto?
Pues eso, resolver el problema. Hay que conseguir validar, según W3C, la Web del ejemplo.html y que el javascript funcione correctamente, exactamente como lo está haciendo ahora.

¿Cuál es el premio?
Pues como dice el título de este post, 15 euros a través de una cuenta de PayPal para el ganador (y por supuesto todos los honores de ser el campeón). Pago 15 € porque a todos nos viene bien un dinerillo extra y para que la gente ponga un poco de interés en resolver el reto.

¿Quién gana?
Ganará, el primero que publique en este post, el código modificado de la Web del ejemplo.html que puse anteayer, funcionando y validada según W3C (o sea sin ningún error). Una condición que hay que respetar es que el tipo de documento ha de ser HTML 4.01 Transitional (o sea que la primera línea no se puede modificar), el javascript también ha de ser el mismo. El código se presentará de la siguiente forma (código del ejemplo.html sin pasar la validación):



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Documento sin título</title>
</head>

<body>
Primer javascript funcionando:
<div class="js-kit-rating" uniq="primer_script"></div>
Segundo javascript funcionando:
<div class="js-kit-rating" uniq="segundo_script"></div>
<script language="javascript" type="text/javascript" src="http://js-kit.com/ratings.js"></script>
</body>
</html>



Para validar el código hay que entrar en esta dirección http://validator.w3.org/#validate_by_input , pegar el código y pinchar en "Check".

Como podéis ver, el código del ejemplo.html que os he puesto, da un error al intentar validarlo. Corregir ese error es el reto que hay que resolver.

Pasados un par de meses, contando desde hoy, si nadie ha resuelto el problema, el concurso quedará desierto y entenderé que el problema no tiene solución.

Y nada más, un saludo para todos y queda abierto este concurso.

Para cualquier duda, aquí estaré.
¿Qué sucedería si se enfrentara una fuerza imparable contra un muro inamovible?
Visita Ediciones MA40 - Libros clásicos de ajedrez y este blog de ajedrez
ChessFaucet.com - Gana bitcoins jugando al ajedrez contra el ordenador

madpitbull_99

Por que lo pones en Desafios y Wargames? Simplemente quieres que te hagamos los deberes.

Y encima lo pones como un concurso ... Seguro que si lo pones en Desarrollo Web alguien te ayudara.



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

MA40

#2
Cita de: madpitbull_99 en 15 Octubre 2010, 11:57 AM
Por que lo pones en Desafios y Wargames? Simplemente quieres que te hagamos los deberes.

Y encima lo pones como un concurso ... Seguro que si lo pones en Desarrollo Web alguien te ayudara.

Ya lo puse en Desarrollo Web pero, como dije al principio, no tuve éxito.
madpitbull_99 ¿no crees que puede ser un reto interesante? Se me ocurrió ayer ponerlo aquí y como me pareció buena idea, hoy lo he hecho. De todas formas, si a los moderadores les parece que es improcedente pueden borrarlo, lo entenderé.

En cuando a lo de hacerme los deberes, llevo más tres meses intentando solucionarlo por mi cuenta pero nada, no lo he conseguido, y ya me había rendido por eso pedí ayuda. Yo no me gano la vida con esto amigo, lo hago solo por hobby y por aprender. No entiendo en qué puede molestarte.

Un saludo.
¿Qué sucedería si se enfrentara una fuerza imparable contra un muro inamovible?
Visita Ediciones MA40 - Libros clásicos de ajedrez y este blog de ajedrez
ChessFaucet.com - Gana bitcoins jugando al ajedrez contra el ordenador

jdc


~

#4
Parece que se puede usar "id" en lugar de "uniq", aunque parece que puede borrarse por completo (por lo menos a mí me funcionó). Lo que sí parece importante es que el div contenga "class="js-kit-rating"" porque parece que el script busca todos los div con ese nombre de clase de stylesheet como un arreglo.

También hay que guardar el archivo como ANSI (manteniendo el meta en "utf-8") y reemplacé todos los caracteres "extraños" no ingleses por sus entidades HTML (en este caso, la í fue cambiada por &iacute;). Con esto la validación queda en 0 errores y 0 warnings.

Ahora solo hace falta ver si realmente funciona y se valida como se espera:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>Documento sin t&iacute;tulo</title>
</head>

<body>
 Primer javascript funcionando:
 <div class="js-kit-rating" id="primer_script"></div>

 Segundo javascript funcionando:
 <div class="js-kit-rating" id="segundo_script"></div>

 <script language="javascript" type="text/javascript" src="http://js-kit.com/ratings.js"></script>
</body>
</html>

Sitio web (si la siguiente imagen no aparece es porque está offline):

MA40

#5
Hola ~

Muchas gracias por tu aporte, al menos ya hay alguien que toma una postura constructiva.

La validación W3C sí que la ha pasado, pero subí el archivo y el script no funciona correctamente, puedes verlo aquí.

***** PROBLEMA RESUELTO Y ENLACE ELIMINADO *****

Parece ser que el atributo uniq es empleado por el script para diferenciar los scripts cuando hay más de uno, por eso en mi ejemplo puse dos para comprobar que realmente funciona.

En tu archivo, "ejemplo1.html" (el tuyo que acabo de subir) aunque aparentemente funciona, los dos scripts dejan de ser independientes. O sea que aunque tenemos dos barras de calificación por estrellas (que deberían de ser independientes como ocurre en el ejemplo.html mío), en realidad lo que tenemos son dos barras de calificación con la misma imagen las dos, y lo que cambia en una, automáticamente cambia en la otra dejando de ser independientes.

El tuyo funciona exactamente de la misma manera que si no se pusiera el atributo "uniq" (ni el "id").

Un saludo.
¿Qué sucedería si se enfrentara una fuerza imparable contra un muro inamovible?
Visita Ediciones MA40 - Libros clásicos de ajedrez y este blog de ajedrez
ChessFaucet.com - Gana bitcoins jugando al ajedrez contra el ordenador

~

#6
Entonces lo que habría que hacer es modificar un poco el script mismo. Aquí tengo un ejemplo de página web (el único cambio ahora es que el script está en nuestro servidor y se llama "ratings1.js").

Más abajo pongo el código de "ratings1.js". Lo que hice fue cambiar todas las instancias de "uniq" por "id" usando Wordpad que viene con Windows. Ambos archivos deberían estar en el mismo directorio (el HTML y el JS) para este ejemplo:

Descargar ejemplo2.zip

No pude ponerlo directamente en este foro como adjunto porque no encontré la opción de adjuntar.
Sitio web (si la siguiente imagen no aparece es porque está offline):

MA40

#7
Hola ~

Podría ser.
Veamos.
He subido los dos archivos y parece que ahora funcionan correctamente.

Puedes verlo en esta dirección.

***** PROBLEMA RESUELTO Y ENLACE ELIMINADO *****

Solo me queda una duda.
Dices que has reemplazado todas las instancias "uniq" por "id" en el archivo fuente del JavaScrit. Podría ser esa la solución, correcto. Pero el archivo fuente antes de ser modificado ya tenía unas instancias "id". ¿Qué pasará ahora con las nuevas? Ahora están mezcladas todas las "id". ¿Podría eso causar algún problema?

Un saludo.

Pd.: Voy a chequear y te digo.
¿Qué sucedería si se enfrentara una fuerza imparable contra un muro inamovible?
Visita Ediciones MA40 - Libros clásicos de ajedrez y este blog de ajedrez
ChessFaucet.com - Gana bitcoins jugando al ajedrez contra el ordenador

MA40

Hola ~

Parece que todo funciona correctamente.

Se cierra el concurso y ~ es el ganador.

Si te parece, mándame un privado con la dirección de tu cuenta en PayPal y te hago un ingreso de 15 euros y quede mi agradecimiento por aquí  :).

Una cosa. ¿Se podría utilizar un atributo con otro nombre que no fuera el "id" que estuviera dentro de los estándares HTML 4.01 Transitional y que no estuviera en el archivo fuente del javascript antes de ser modificado? De esa forma estaríamos seguros que al ser remplazado el "uniq" no va a haber nunca el posible problema que te comentaba antes.

Muchas gracias.
¿Qué sucedería si se enfrentara una fuerza imparable contra un muro inamovible?
Visita Ediciones MA40 - Libros clásicos de ajedrez y este blog de ajedrez
ChessFaucet.com - Gana bitcoins jugando al ajedrez contra el ordenador

~

#9
Aparentemente no hay problemas. Opcionalmente está esta página que es más limpia y con el script original, agregando "uniq" vía javascript. Debería funcionar, es de ver cómo funciona en varios navegadores tal vez:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>Documento sin t&iacute;tulo</title>
</head>

<body>
 Primer javascript funcionando:
 <div class="js-kit-rating" id="s1"></div>

 Segundo javascript funcionando:
 <div class="js-kit-rating" id="s2"></div>

 <script language="javascript" type="text/javascript">
  var newdiv = document.getElementById('s1');
  newdiv.setAttribute('uniq',"primer_script");
  newdiv.setAttribute('class',"js-kit-rating");

  newdiv = document.getElementById('s2');
  newdiv.setAttribute('uniq',"segundo_script");
  newdiv.setAttribute('class',"js-kit-rating");
 </script>

 <script language="javascript" type="text/javascript" src="http://js-kit.com/ratings.js"></script>
</body>
</html>

Sitio web (si la siguiente imagen no aparece es porque está offline):