Cue Storyline: C'est le début du 21e siècle, et la plupart des choses sont devenues une chose du passé. Cependant, vous et vos collègues code-golf-eteers êtes en quête de reconstituer les années 1990. Dans le cadre de ce défi, vous devez recréer un salon de discussion minimaliste.
L'objectif: créer un salon de discussion avec le moins d'octets possible. Le ou les programmes que vous écrivez fonctionneront comme un simple serveur, qui sert une page Web, qui permet aux utilisateurs de publier du texte à l'écran.
L'objectif réel: héberger réellement un salon de discussion fonctionnel à partir de votre propre ordinateur. Vous n'avez pas à le faire, mais c'est beaucoup plus amusant de cette façon.
Exigences:
- Les utilisateurs doivent pouvoir se donner un nom d'utilisateur qui dure la session
- Les utilisateurs doivent être en mesure de taper et de soumettre du texte à plusieurs reprises, qui sera affiché aux autres utilisateurs
- Chaque utilisateur doit pouvoir voir le texte qui est soumis par tous les utilisateurs, ainsi que les noms d'utilisateur des auteurs, et les informations doivent être affichées dans l'ordre chronologique
- La page doit également afficher le nombre de personnes en ligne et une liste de leurs noms d'utilisateur
- Votre salon de discussion doit être accessible à toute personne sur Internet qui sait où la trouver (comme connaître l'adresse IP).
- Il devrait fonctionner dans les navigateurs Web modernes.
Tout dépend de vous!
Soumissions:
- Doit inclure le code source ou un lien vers le code source
- Devrait inclure des captures d'écran du salon de discussion fonctionnel
- Doit inclure la taille totale, en octets, de tous les programmes / fichiers que vous avez écrits et qui sont nécessaires pour le faire fonctionner.
Ce défi est dans le bac à sable depuis un certain temps maintenant, alors j'espère que tous les problèmes ont été résolus.
Réponses:
PHP + JQuery + HTML + CSS, 1535 octets
Il s'agit d'une soumission qui penche davantage vers ce que le PO considérait comme «l'objectif réel». Autrement dit, un serveur de chat entièrement fonctionnel, qui peut être hébergé sur à peu près n'importe quel serveur Web n'importe où.
La fonctionnalité comprend:
Pour être une session, entrez un alias dans la case appropriée et appuyez sur Tabou Enterpour soumettre. Si l'alias est déjà utilisé, vous en serez informé. L'envoi de messages se fait également via Enter.
Pour votre commodité, une archive de tous les fichiers peut être trouvée ici: chat.zip (choisissez Télécharger dans le menu Fichier). Pour l'installer, décompressez vers un répertoire Web sur n'importe quel serveur exécutant PHP 5.4 ou supérieur.
Mises en garde:
cache:false
à chaque demande Ajax.change
événement n'est pas déclenché (en appuyant sur Tab, cependant, cela fonctionne). Cela pourrait être résolu en ajoutant unonkeypress
gestionnaire, en vérifiant si la clé était Entrée, puis en appelant$(v).blur().focus()
.En bref, IE n'est pas pris en charge.
Client
Le positionnement des éléments pourrait être un peu plus robuste, mais il devrait bien paraître avec une taille de fenêtre minimale d'environ ~ 800x600.
chat.htm (190 octets)
c.css (136 octets)
c.js (435 octets)
Serveur
Je m'excuse pour le serveur étant divisé en autant de petits morceaux. L'alternative serait d'utiliser un protocole de message adéquat (via l'encodage / décodage JSON), ou d'avoir un grand
if ... elseif ...
en fonction des variables de post présentes. Faire des scripts séparés, une simple demande de celui dont vous avez besoin est beaucoup plus court, et peut-être plus simple que les deux.o.php (119 octets) O stylets comme connexion à la 'base de données'
c.php (57 octets) C ommet les modifications de la 'base de données'
p.php (151 octets) P OLL pour les nouveaux messages
s.php (62 octets) S fin un message au serveur
u.php (222 octets) Enregistrement de ser u ou changement d'alias
n.php (65 octets) Récupère la liste des utilisateurs n ames
l.php (98 octets) L'utilisateur a l eft (fermé son navigateur)
la source
onchange=u
passer des parenthèses. Cependant, vous n'obtiendrez pas un contexte cohérent, mais vous n'en avez pas besoin de toute façon.Python, 230
C'est assez minime, mais cela semble être conforme aux spécifications. Les utilisateurs sont comptés comme "affichant la page" s'ils ont discuté au cours des 99 dernières secondes.
Cela utilise l'une de mes astuces préférées en python: les valeurs par défaut ne sont que des références à tout ce que vous avez passé. Si c'est un objet mutable, il vient juste pour le trajet.
Un autre que je n'utilise pas souvent - le curry!
Exécution du serveur:
Exécutez le script de chat à partir de python (par exemple,
python chat.py
) puis pointez votre navigateur vershttp://localhost:8080
pour voir quelque chose commePython, 442
Celui-ci est en fait agréable à utiliser. C'est le golf, donc je considère que c'est une solution moins satisfaisante. Maintenant, j'abuse un iframe et un formulaire avec le traitement des clés ... et une méta-actualisation pour interroger le nouveau contenu.
la source
http://localhost:8080/c
et accéder à votre serveur HTTP8080
, vous pouvez ajouter ce qui suit pour utiliser un autre port:S.config.update({'server.socket_port':8090})
Meteor: 575 caractères
J'ai eu beaucoup de plaisir avec celui-ci! L'application est en ligne sur http://cgchat.meteor.com/ .
chat.html: 171 caractères
lib / chat.js: 45 caractères
client / client.js: 359 caractères
la source
Noeud / Meteor javascript + html + css + websocket: 1,105 octets
En voici un qui utilise node.js / meteor . Évidemment écrit en js, en temps réel et en utilisant des websockets. Utilise les packages intégrés par défaut de meteor.
Il pourrait être beaucoup plus petit. De plus, il est persistant grâce au mongo inclus (pas que ce soit une bonne chose).
Une capture d'écran fonctionnelle:
Pour exécuter, installez météore.
Linux:
Windows: win.meteor.com
Clonez mon dépôt et exécutez le météore:
pointer votre navigateur vers localhost: 3000
chat.js: 703 octets (client / serveur):
chat.css: 132 octets
chat.html: 270 octets
la source
chat.html
semble avoir que 254 octets. Notez que les navigateurs ne sont pas terriblement difficiles - je ne prends pas la peine de fermer les balises, et vous n'avez certainement pas besoin de la barre oblique à la fin des balises (sauf si le nœud l'exige?). Aussi, tuez plus d'espace! J'en vois quelques-uns dans le javascript, et beaucoup trop dans le html.