Cue Storyline: es a principios del siglo XXI, y la mayoría de las cosas se han convertido en cosa del pasado. Sin embargo, usted y sus compañeros de código-golf-eteers están en una búsqueda para recrear la década de 1990. Como parte de este desafío, debes recrear una sala de chat minimalista.
El objetivo: crear una sala de chat con el menor número de bytes posible. El programa (s) que escriba funcionará como un servidor simple, que sirve una página web, que permite a los usuarios publicar texto en la pantalla.
El objetivo real: alojar una sala de chat que funcione desde su propia computadora. No tiene que hacer esto, pero es mucho más divertido de esta manera.
Requisitos:
- Los usuarios deberían poder darse un nombre de usuario que dure la sesión
- Los usuarios deben poder escribir y enviar texto repetidamente, que se mostrará a otros usuarios
- Cada usuario debe poder ver el texto enviado por todos los usuarios, junto con los nombres de usuario de los remitentes, y la información debe mostrarse en orden cronológico.
- La página también debe mostrar el número de personas en línea y una lista de sus nombres de usuario
- Su sala de chat debe ser accesible para cualquier persona en Internet que sepa dónde encontrarla (como conocer la dirección IP).
- Debería funcionar en los navegadores web modernos.
¡Todo lo demás depende de ti!
Presentaciones:
- Debe incluir el código fuente o un enlace al código fuente
- Debe incluir capturas de pantalla de la sala de chat funcional
- Debe incluir el tamaño total, en bytes, de todos los programas / archivos que ha escrito que son necesarios para que funcione.
Este desafío ha estado en la caja de arena por un tiempo, así que espero que todos los problemas hayan sido resueltos.
Respuestas:
PHP + JQuery + HTML + CSS, 1535 bytes
Esta es una presentación que se inclina más hacia lo que el OP consideró como 'el objetivo real'. Es decir, un servidor de chat totalmente funcional, que puede alojarse en casi cualquier servidor web en cualquier lugar.
La funcionalidad incluye:
Para ser una sesión, ingrese un alias en el cuadro correspondiente y presione Tabo Enterpara enviar. Si el alias ya está en uso, se le notificará. El envío de mensajes también se realiza a través de Enter.
Para su comodidad, puede encontrar un archivo de todos los archivos aquí: chat.zip (elija Descargar en el menú Archivo). Para instalar, descomprima en un directorio web en cualquier servidor que ejecute PHP 5.4 o superior.
Advertencias:
cache:false
a cada solicitud de Ajax.change
evento no se activa (sin embargo, presionar Tabulador funciona). Esto podría solucionarse agregando unonkeypress
controlador, verificando si la clave era Enter y luego llamando$(v).blur().focus()
.En resumen, IE no es compatible.
Cliente
El posicionamiento de los elementos podría ser un poco más robusto, pero debería verse bien con un tamaño mínimo de ventana de aproximadamente ~ 800x600.
chat.htm (190 bytes)
c.css (136 bytes)
c.js (435 bytes)
Servidor
Pido disculpas por el servidor dividido en tantos trozos pequeños. La alternativa sería utilizar un protocolo de mensaje adecuado (a través de codificación / decodificación JSON), o tener un
if ... elseif ...
mensaje grande de acuerdo con las variables de publicación presentes. Al hacer scripts por separado, un simple pedido del que necesita es mucho más corto y quizás más simple que ambos.o.php (119 bytes) O pen como conexión a la 'base de datos'
c.php (57 bytes) C omite cambios en la 'base de datos'
p.php (151 bytes) P olls para mensajes nuevos
s.php (62 bytes) S finaliza un mensaje al servidor
u.php (222 bytes) T inscripción Ser o cambio de alias
n.php (65 bytes) recupera la lista de usuario n Ames
l.php (98 bytes) El usuario tiene l eft (cerró su navegador)
fuente
onchange=u
prescindir de los paréntesis. Sin embargo, no obtendrá un contexto coherente, pero de todos modos no lo necesita.Python, 230
Esto es bastante mínimo, pero parece estar a la altura. Los usuarios se cuentan como "viendo la página" si han chateado en los últimos 99 segundos.
Utiliza uno de mis trucos favoritos en Python: los valores predeterminados son solo referencias a lo que haya pasado. Si se trata de un objeto mutable, simplemente aparece para el viaje.
Otro que no uso con frecuencia: ¡curry!
Ejecutando el servidor:
Ejecute el script de chat desde python (por ejemplo
python chat.py
) y luego apunte su navegadorhttp://localhost:8080
para ver algo comoPython, 442
Este es realmente agradable de usar. Esto es golf, así que considero que es una solución menos satisfactoria. Ahora, abuso de un iframe y un formulario con manejo de teclas ... y una meta actualización para sondear el contenido nuevo.
fuente
http://localhost:8080/c
y acceder a su servidor HTTP8080
, puede anteponer lo siguiente para usar un puerto diferente:S.config.update({'server.socket_port':8090})
Meteorito: 575 caracteres
¡Me divertí mucho con este! La aplicación está en vivo en http://cgchat.meteor.com/ .
chat.html: 171 caracteres
lib / chat.js: 45 caracteres
client / client.js: 359 caracteres
fuente
Nodo / Meteor javascript + html + css + websocket: 1,105 bytes
Aquí hay uno usando node.js / meteor . Obviamente escrito en js, en tiempo real, y usando websockets. Utiliza los paquetes integrados predeterminados de meteor.
Podría ser mucho más pequeño. También es persistente a través del mongo incluido (no es que eso sea algo bueno).
Una captura de pantalla de trabajo:
Para ejecutar, instala meteorito.
Linux:
Windows: win.meteor.com
Clona mi repositorio y ejecuta meteorito:
apunte su navegador a localhost: 3000
chat.js: 703 bytes (cliente / servidor):
chat.css: 132 bytes
chat.html: 270 bytes
fuente
chat.html
parece tener solo 254 bytes. Tenga en cuenta que los navegadores no son terriblemente exigentes: no me molesto en cerrar las etiquetas y definitivamente no necesita la barra al final de las etiquetas (a menos que el nodo lo requiera). ¡Además, mata más espacios en blanco! Veo un par en el javascript, y demasiado en el html.