Cue Storyline: É o início do século 21, e a maioria das coisas se tornou coisa do passado. Você e seus colegas jogadores de código de golfe, no entanto, estão em uma missão para reencenar os anos 90. Como parte desse desafio, você deve recriar uma sala de bate-papo minimalista.
O objetivo: criar uma sala de bate-papo com o mínimo de bytes possível. Os programas que você escreve devem funcionar como um servidor simples, que serve uma página da Web, que permite aos usuários postar texto na tela.
O objetivo real: Realmente hospedar uma sala de chat em funcionamento a partir do seu próprio computador. Você não precisa fazer isso, mas é muito mais divertido assim.
Requisitos:
- Os usuários devem poder fornecer um nome de usuário que dure pela sessão
- Os usuários devem poder digitar e enviar repetidamente texto, que será exibido para outros usuários
- Cada usuário deve poder ver o texto que é enviado por todos os usuários, juntamente com os nomes de usuários dos remetentes, e as informações devem ser exibidas em ordem cronológica
- A página também deve exibir o número de pessoas on-line e uma lista de seus nomes de usuário
- Sua sala de bate-papo deve estar acessível a qualquer pessoa na internet que saiba onde encontrá-la (como saber o endereço IP).
- Ele deve funcionar em navegadores modernos.
Tudo o resto é com você!
Submissões:
- Deve incluir o código fonte ou um link para o código fonte
- Deve incluir capturas de tela da sala de chat funcional
- Deve incluir o tamanho total, em bytes, de todos os programas / arquivos que você escreveu, necessários para fazê-lo funcionar.
Esse desafio está na caixa de areia há um tempo, então, espero que todas as dobras tenham sido resolvidas.
Respostas:
PHP + JQuery + HTML + CSS, 1535 bytes
Esta é uma submissão que se inclina mais para o que o OP considerou como 'o objetivo real'. Ou seja, um servidor de bate-papo totalmente funcional, que pode ser hospedado em praticamente qualquer servidor Web em qualquer lugar.
A funcionalidade inclui:
Para ser uma sessão, insira um alias na caixa apropriada e pressione Tabou Enterpara enviar. Se o alias já estiver em uso, você será notificado. O envio de mensagens também é feito via Enter.
Para sua conveniência, um arquivo de todos os arquivos pode ser encontrado aqui: chat.zip (escolha Download no menu Arquivo). Para instalar, descompacte em um diretório da web em qualquer servidor executando o PHP 5.4 ou superior.
Ressalvas:
cache:false
a cada solicitação do Ajax.change
evento não é acionado (pressionar Tab, no entanto, funciona). Isso poderia ser corrigido adicionando umonkeypress
manipulador, verificando se a chave era Enter e depois chamando$(v).blur().focus()
.Em suma, o IE não é suportado.
Cliente
O posicionamento dos elementos pode ser um pouco mais robusto, mas deve ficar bem com um tamanho mínimo de janela de aproximadamente ~ 800x600.
chat.htm (190 bytes)
c.css (136 bytes)
c.js (435 bytes)
Servidor
Peço desculpas pelo servidor estar dividido em tantos pequenos pedaços. A alternativa seria usar um protocolo de mensagem adequado (via JSON codificar / decodificar) ou ter um grande de
if ... elseif ...
acordo com o qual as variáveis de postagem estão presentes. Criando scripts separados, basta solicitar o que você precisa é muito mais curto e talvez mais simples que os dois.o.php (119 bytes) O canetas como conexão com o 'banco de dados'
c.php (57 bytes) C omite alterações no 'banco de dados'
p.php (151 bytes) P olls para novas mensagens
s.php (62 bytes) S finaliza uma mensagem para o servidor
u.php (222 bytes) L registo Ser ou mudança de alias
n.php (65 bytes) recupera a lista de utilizador n ames
l.php (98 bytes) Usuário l eft (fechou o navegador)
fonte
onchange=u
sem os parênteses. Você não terá um contexto consistente, no entanto, mas não precisará disso.Python, 230
Isso é mínimo, mas parece estar dentro das especificações. Os usuários são contados como "visualizando a página" se tiverem conversado nos últimos 99 segundos.
Isso usa um dos meus truques favoritos em python: os valores padrão são apenas referências ao que você passou. Se é um objeto mutável, ele apenas aparece.
Outro que eu não uso com frequência - curry!
Executando o servidor:
Execute o script de bate-papo a partir de python (por exemplo
python chat.py
) e aponte o navegadorhttp://localhost:8080
para ver algo comoPython, 442
Este é realmente bom de usar. Isso é golfe, então considero isso uma solução menos satisfatória. Agora, eu abusei de um iframe e de um formulário com manipulação de teclas ... e uma meta atualização para pesquisar novos conteúdos.
fonte
http://localhost:8080/c
e acessar o servidor HTTP8080
, você pode acrescentar o seguinte para usar uma porta diferente:S.config.update({'server.socket_port':8090})
Meteoro: 575 caracteres
Eu me diverti muito com este! O aplicativo está disponível em http://cgchat.meteor.com/ .
chat.html: 171 caracteres
lib / chat.js: 45 caracteres
client / client.js: 359 caracteres
fonte
Javascript do nó / meteoro + html + css + websocket: 1.105 bytes
Aqui está um usando node.js / meteor . Obviamente escrito em js, em tempo real e usando websockets. Usa os pacotes internos padrão do meteoro.
Poderia ser muito menor. Também é persistente por meio do mongo incluído (não que isso seja uma coisa boa).
Uma captura de tela de trabalho:
Para executar, instale o meteoro.
Linux:
Windows: win.meteor.com
Clone meu repositório e execute o meteoro:
aponte seu navegador para localhost: 3000
chat.js: 703 bytes (cliente / servidor):
chat.css: 132 bytes
chat.html: 270 bytes
fonte
chat.html
parece ter apenas 254 bytes. Observe que os navegadores não são muito exigentes - não me preocupo em fechar as tags e você definitivamente não precisa da barra no final das tags (a menos que o nó exija isso). Além disso, mate mais espaço em branco! Eu vejo um par no javascript, e muito no html.