Cue Storyline: Jest początek XXI wieku, a większość rzeczy przeszła do przeszłości. Jednak ty i twoi koledzy-golfa-eteers dążycie do odtworzenia lat 90. W ramach tego wyzwania musisz odtworzyć minimalistyczny pokój rozmów.
Cel: Stworzenie pokoju rozmów z jak najmniejszą liczbą bajtów. Program, który piszesz, powinien działać jako prosty serwer, który obsługuje stronę internetową, która umożliwia użytkownikom publikowanie tekstu na ekranie.
Rzeczywisty cel: faktyczne prowadzenie działającego pokoju rozmów na własnym komputerze. Nie musisz tego robić, ale w ten sposób jest o wiele więcej zabawy.
Wymagania:
- Użytkownicy powinni mieć możliwość nadania sobie nazwy użytkownika, która będzie trwała podczas sesji
- Użytkownicy powinni mieć możliwość wielokrotnego wpisywania i przesyłania tekstu, który będzie wyświetlany innym użytkownikom
- Każdy użytkownik powinien widzieć tekst przesłany przez wszystkich użytkowników wraz z nazwami użytkowników przesyłających, a informacje powinny być wyświetlane w kolejności chronologicznej
- Strona powinna również wyświetlać liczbę osób online oraz listę ich nazw użytkowników
- Twój czat powinien być dostępny dla każdego w Internecie, który wie, gdzie go znaleźć (np. Znając adres IP).
- Powinien działać w nowoczesnych przeglądarkach internetowych.
Wszystko inne zależy od Ciebie!
Zgłoszenia:
- Powinien zawierać kod źródłowy lub link do kodu źródłowego
- Powinny zawierać zrzuty ekranu z funkcjonalnego pokoju rozmów
- Powinien zawierać całkowity rozmiar wszystkich bajtów wszystkich napisanych programów / plików wymaganych do jego działania.
To wyzwanie jest już od dłuższego czasu w piaskownicy, więc mam nadzieję, że wszystkie załamania zostały opracowane.
Odpowiedzi:
PHP + JQuery + HTML + CSS, 1535 bajtów
Jest to oświadczenie skłaniające się bardziej w kierunku tego, co PO uznał za „faktyczny cel”. To znaczy w pełni funkcjonalny serwer czatu, który może być hostowany na dowolnym serwerze WWW w dowolnym miejscu.
Funkcjonalność obejmuje:
Aby być sesją, wpisz alias w odpowiednim polu i naciśnij Tablub, Enteraby przesłać. Jeśli alias jest już używany, zostaniesz o tym powiadomiony. Wysyłanie wiadomości odbywa się również za pośrednictwem Enter.
Dla Twojej wygody archiwum wszystkich plików można znaleźć tutaj: chat.zip (wybierz polecenie Pobierz z menu Plik). Aby zainstalować, rozpakuj do katalogu internetowego na dowolnym serwerze z PHP 5.4 lub nowszym.
Ostrzeżenia:
cache:false
do każdego żądania Ajax.change
zdarzenie nie jest wyzwalane (naciśnięcie Tab jednak działa). Można to naprawić, dodająconkeypress
moduł obsługi, sprawdzając, czy klucz to Enter, a następnie wywołując$(v).blur().focus()
.Krótko mówiąc, IE nie jest obsługiwany.
Klient
Pozycjonowanie elementów może być nieco bardziej niezawodne, ale powinno wyglądać dobrze przy minimalnym rozmiarze okna około ~ 800x600.
chat.htm (190 bajtów)
c.css (136 bajtów)
c.js (435 bajtów)
serwer
Przepraszam, że serwer został podzielony na tak wiele małych kawałków. Alternatywą byłoby użycie odpowiedniego protokołu komunikatu (za pomocą kodowania / dekodowania JSON) lub dużego,
if ... elseif ...
zgodnie z obecnymi zmiennymi końcowymi. Tworzenie oddzielnych skryptów, po prostu żądanie od tego, czego potrzebujesz, jest o wiele krótsze i być może prostsze niż oba.o.php (119 bajtów) O długopisy jako połączenie z „bazą danych”
c.php (57 bajtów) C zaleca zmiany w „bazie danych”
p.php (151 bajtów) P olls dla nowych wiadomości
s.php (62 bajty) S kończy komunikat do serwera
u.php (222 bajtów) U rejestracji Ser lub zmiana ps
n.php (65 bajtów) pobiera listę użytkowników n , ab
l.php (98 bajtów) Użytkownik ma l eft (zamknął przeglądarkę)
źródło
onchange=u
bez nawiasów. Nie uzyskasz jednak spójnego kontekstu, ale i tak go nie potrzebujesz.Python, 230
Jest to dość minimalne, ale wydaje się być zgodne ze specyfikacją. Użytkownicy są liczeni jako „przeglądający stronę”, jeśli rozmawiali przez ostatnie 99 sekund.
Wykorzystuje jedną z moich ulubionych sztuczek w pythonie: wartości domyślne są tylko odniesieniami do tego, co przeszedłeś. Jeśli jest to obiekt zmienny, po prostu pojawia się podczas jazdy.
Kolejny, którego nie używam często - curry!
Uruchamianie serwera:
Uruchom skrypt czatu z Pythona (na przykład
python chat.py
), a następnie skieruj przeglądarkę na,http://localhost:8080
aby zobaczyć coś takiegoPython, 442
Ten jest naprawdę przyjemny w użyciu. To jest golf, więc uważam to za mniej satysfakcjonujące rozwiązanie. Teraz nadużywam elementu iframe i formularza z obsługą klawiszy ... oraz metaodświeżania, aby sondować nowe treści.
źródło
http://localhost:8080/c
i uzyskać dostęp do serwera HTTP8080
, możesz wcześniej przygotować następującą opcję, aby użyć innego portu:S.config.update({'server.socket_port':8090})
Meteor: 575 znaków
Świetnie się z tym bawiłem! Aplikacja jest dostępna na stronie http://cgchat.meteor.com/ .
chat.html: 171 znaków
lib / chat.js: 45 znaków
client / client.js: 359 znaków
źródło
Węzeł / Meteor javascript + html + css + websocket: 1,105 bajtów
Oto jeden za pomocą node.js / meteor . Oczywiście napisane w js, w czasie rzeczywistym i przy użyciu websockets. Korzysta z domyślnych wbudowanych pakietów meteorów.
Może być znacznie mniejszy. Jest też trwały dzięki dołączonemu mangowi (nie jest to dobre).
Działający zrzut ekranu:
Aby wykonać, zainstaluj meteor.
Linux:
Windows: win.meteor.com
Sklonuj moje repozytorium i wykonaj meteor:
skieruj swoją przeglądarkę na localhost: 3000
chat.js: 703 bajty (klient / serwer):
chat.css: 132 bajty
chat.html: 270 bajtów
źródło
chat.html
wydaje się mieć tylko 254 bajty. Zauważ, że przeglądarki nie są strasznie wybredne - nie zawracam sobie głowy zamykaniem tagów i zdecydowanie nie potrzebujesz ukośnika na końcu tagów (chyba że węzeł tego wymaga?). Zabij też więcej białych znaków! Widzę parę w javascript i zdecydowanie za dużo w HTML.