Napisane: 14.10.2016, 22:57:50 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Jak chcesz bronić ludzi przed podszywaniem się, to po prostu zaimplementuj mechanizm sesji, ustaw timeout na tę sesję i dodaj logowanie do czatu. WebSocket działa na serwerze HTTP, w momencie utworzenia socketa, leci request HTTP. Wymuś logowanie na typ etapie, by utworzenie połączenia było możliwe tylko z loginem i hasłem, po utworzeniu socketa ustaw timeout po jakim HTTP ma być zamknięte, co zamknie również WS. |
Forum: Przedszkole · Podgląd postu: #1202237 · Odpowiedzi: 3 · Wyświetleń: 622 |
Napisane: 14.10.2016, 21:12:09 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Nie jestem profesjonalnym programistą JAVY, ale pracując z nią hobbystycznie i pobocznie w pracy, myślę, że mogę odpowiedzieć. 1. JAVA a bazy danych to dwie osobne rzeczy i najcześciej sprawa takich aplikacji wygląda podobnie jak w PHP - apka JAVAowa korzysta z API i konfiguracji osobno zainstalowanej bazy danych lub big data, by zapisywać i czytać dane. W przypadku aplikacji bardziej pod zastosowanai domowe niz serwerowe, czasem do instalatora dodawane są opcje typu "Posiadam bazę danych" i "Nie posiadam", po czym instalator odpowiednio reaguje. Aczkolwiek najczęściej baza stoi na serwerze. 2. Nie mam pojęcia, przynajmniej nie przy desktopowej apce. 3. IntelliJ jest teraz na topie , więc jak do PHP używasz PHPStorma, to powinieneś czuć się jak w domu. 4. Spring i Hibernate to podstawa. |
Forum: Hydepark · Podgląd postu: #1202231 · Odpowiedzi: 5 · Wyświetleń: 1 037 |
Napisane: 11.10.2016, 20:17:26 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Tak jak pisze Pyton_000 to czego szukasz to websocket - tutaj przykład https://github.com/kraken-php/demo-chat |
Forum: Przedszkole · Podgląd postu: #1202010 · Odpowiedzi: 2 · Wyświetleń: 317 |
Napisane: 8.10.2016, 15:27:24 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Zaleznie od potrzeb używasz albo WebSocket, albo HTTP Long-Polling. To pierwsze jest wydajniejsze, ale wymaga customowej logiki, bo nie jest zgodne z tym jak działa HTTP w 100%. Z tego co piszesz to long-polling będzie wystarczajace. WebSocket to nie jest wynalazek node'owy. Jest to pewien standard. Websocketów możesz używać również w PHP, Pythonie, Ruby i zapewne wielu innych językach programowania. Ratchet to implementacja WebSocketów w PHP, dzięki czemu nie potrzebujesz Node.js by ich używać. Ratchet jest wydajniejszy od implementacji node'owych, ale nie jest aż tak enterprise'owy jak np socket.io. A jak myślisz nad WS w PHP to oprócz ratcheta polecam jeszcze sprawdzić Kraken/Network |
Forum: PHP · Podgląd postu: #1201774 · Odpowiedzi: 9 · Wyświetleń: 599 |
Napisane: 6.10.2016, 22:25:52 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Nie, to nie są websockety. To jest long-polling z wykorzystaniem samego HTTP. Klikasz na budowę budynku, do serwera leci requet, serwer przelicza czas kiedy budowa się zaczęła, odsyła do przeglądarki ile ma ona czekać, przeglądarka uruchamia timer a po tym czasie odświeża automatycznie stronę. Nic wiecej tutaj nie potrzeba. A jak koniecznie chcesz się bawić websocketami to zamiast mieszkać PHP z Node.js użyj albo samego Node.js albo WebSocketów w PHP. |
Forum: PHP · Podgląd postu: #1201645 · Odpowiedzi: 9 · Wyświetleń: 599 |
Napisane: 11.09.2016, 22:45:44 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Jak dla mnie to co opisujesz brzmi jak typowe zastosowanie dla strategii. Teoria: https://en.wikipedia.org/wiki/Strategy_pattern Strona opisująca implementację tego wzorca: http://www.oodesign.com/strategy-pattern.html Trochę prostsza wersja tego co powyżej w PHP: http://www.phptherightway.com/pages/Design-Patterns.html |
Forum: Object-oriented programming · Podgląd postu: #1199837 · Odpowiedzi: 6 · Wyświetleń: 4 292 |
Napisane: 4.05.2016, 13:54:25 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Twoje pytanie jakie zadałeś w tym temacie jest nie do końca jasne. Porównujesz użycie dwów wzorców, które stosowane są pod inne potrzeby, a dodatkowo w dość dziwny sposób pokazujesz przykład użycia fabryk w kodzie, co budzi moje podejrzenia, że być może źle je interpretujesz. Mówiąc krótko, dziedziczenie jest po to, byś rozszerzajać daną klasę nie musiał kopiować kodu z klasy bazowej, a Dependency Injection po to, by kod był prostszy do ponownego użycia i do testowania. DI powinieneś używać zawsze, bo jest to krótko mówiąc dobra praktyka programistyczna, która być może na poczatku trudna (zwłaszcza jak ktoś się przyzwyczaił do Singletonów, Fasad lub programowania opartego o klasy jak sprzed 10lat), po opanowaniu niesie ze sobą same korzyści. Dziedziczenie używasz z kolei wtedy, gdy jest Ci rzeczywiście potrzebne. Teraz wracając do Twojego pytania, to jeśli pytasz o nadmiarowy kod, który może się pojawić w klasie potomnej ze względu, na to że potrzebujesz założmy tylko 20% klasy funkcjonalności klasy bazowej, to ewidentnie zrobiłeś coś źle z architekturą programu. W innym przypadku jeśli Twoje pytanie sprowadza się tylko do "czy większa klasa = cięższy pamięciowo obiekt?" to odpowiedź brzmi tak. |
Forum: Object-oriented programming · Podgląd postu: #1191095 · Odpowiedzi: 6 · Wyświetleń: 2 413 |
Napisane: 7.09.2015, 22:12:40 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Konfiguracji nie, ale jest możliwość, że Twój kod chce pobrać dane, które w strukturze Twojej bazy np nie istnieją. Mimo wszystko to wciąż byłaby w tym wypadku wina błędnego kodu, nie mysql. |
Forum: Przedszkole · Podgląd postu: #1170485 · Odpowiedzi: 3 · Wyświetleń: 423 |
Napisane: 19.08.2015, 01:29:08 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Możesz to rozwiązać za pomocą JavaScript korzystając z obiektu window.location, np. window.location.href. Sposób działania byłby taki, by pobrać obecny adres na którym jest użytkownik, dokleić do niego lang, lub zmienić jego wartość jeśli już jest i przejść pod tak wygenerowany link. Możesz to również rozwiazać za pomocą samego PHP, generując zawartość Twojego selecta dynamicznie dla każdej strony, czyli zamiast "/?lang=pl" generowałbyś "/{currentHref}&lang=pl" na podstaiwe $_SERVER['HTTP_HOST'] i $_SERVER['REQUEST_URI']. Za pomocą samego HTML tak by działało na każdej przeglądarce o ile mi wiadomo się nie da. |
Forum: Przedszkole · Podgląd postu: #1168694 · Odpowiedzi: 1 · Wyświetleń: 326 |
Napisane: 11.08.2015, 14:20:47 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
AJAX polling lub long-polling, ale pod względem wydajności i precyzji jest to znacznie gorsze rozwiązanie. |
Forum: JavaScript · Podgląd postu: #1167972 · Odpowiedzi: 6 · Wyświetleń: 529 |
Napisane: 8.08.2015, 18:01:15 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Jako zamiennik dla PHP : JAVA, Python Jako dopełnienia dla PHP : JavaScript, C/C++, Golang Jako ciekawostka : Hacklang |
Forum: Hydepark · Podgląd postu: #1167705 · Odpowiedzi: 21 · Wyświetleń: 3 612 |
Napisane: 8.08.2015, 20:33:58 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Uchwyt do storage powinien być zdefiniowany jako Dependency klasy PlayerFactory.
Następnie wywołanie tego kodu w jakimś miejscu wyglądało by tak:
Wszystkie gettery które użyłem na $player, oczywiście musisz zdefiniować wewnątrz klasy PlayerModel. Połaczenie z bazą danych powinno być zdefiniowane gdzieś wewnątrz klasy Storage, czyli np.:
Pamiętaj , że obiekt klasy Storage() powinieneś stworzyć RAZ na całą swoją aplikację i następnie wstrzykiwać tam gdzie jest Ci potrzebny, by nie tworzyć zbędnych połączeń do bazy danych. Oczywiście jest to bardzo prosta implementacja takiego magazynu danych. Wraz ze wzrostem wiedzy, wyabstraktujesz tę klasę do masy innych podklas. |
Forum: Przedszkole · Podgląd postu: #1167711 · Odpowiedzi: 3 · Wyświetleń: 543 |
Napisane: 8.08.2015, 15:56:16 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Przede wszystkim to tablica array nie jest obiektem. Jest milion sposobów w jaki możesz to zrobić, z czego najlepiej będzie zrobić to w taki sposób, że: 1. Stwórz klasę PlayerModel, która jest modelem gracza. W Twoim przykładzie byłoby to coś w stylu:
2. Stwórz fabrykę graczy, która będzie zajmowała się tworzeniem PlayerModel korzystając z jakiejś bazy graczy - np. MySQL
3. Teraz wszędzie, gdzie chcesz skorzystać stworzyć PlayerModel(), możesz użyć coś takiego:
4. W funkcjach metodach, gdzie chcesz użyć tego modelu z kolei możesz go hintować:
5. W razie rozwoju projektu, możesz fabrykę graczy umieścić wewnątrz Dependency Injection Containera. |
Forum: Przedszkole · Podgląd postu: #1167697 · Odpowiedzi: 3 · Wyświetleń: 543 |
Napisane: 8.08.2015, 17:35:03 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Na początek Silex albo Lumen, tak jak pisali koledzy wcześniej. Docelowo, jak je już będziesz miał wybrany z nich w małym palcu, wtedy łatwiej będzie Ci wybrać któryś z większych frameworków takich jak Symfony czy Laravel. Oczywiście dużych projektów jest jeszcze znacznie więcej, ale te i tak będziesz musiał znać. |
Forum: Przedszkole · Podgląd postu: #1167700 · Odpowiedzi: 18 · Wyświetleń: 1 371 |
Napisane: 7.08.2015, 22:34:19 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
W kwestii czy warto zaczynać od microframeworka czy też nie, nie mam zdania, ale osobiście polecam Ci ostatecznie celować w Laravel. Symfony jako framework to przeżytek i jesli nie miałeś z nim wcześniej styczności, lepiej go olej i ogarnij Laravel. |
Forum: Przedszkole · Podgląd postu: #1167661 · Odpowiedzi: 18 · Wyświetleń: 1 371 |
Napisane: 16.07.2015, 15:17:11 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Twój JS wykonuje się zaraz po wczytaniu strony, dokładnie jeden raz. W 5 linii, pobierasz wartość inputa, która w tym momencie zależnie od przeglądarki będzie pustym stringiem lub undefined. Zapisujesz tę wartośc, a następnie w linii 6 ustawiasz handlera zdarzenia onchange na funkcję która podmieni zawartość strony na zawartość tej zmiennej - czyli wyświetli Ci się pusta strona i wydaje Ci się , że się ona przeładowała. Nie powinieneś używać document.write! Kod powinien wyglądać tak: Kod document.getElementById('id1').onchange = function() { var value = this.value; var output = document.getElementById('id2'); output.value = value; }; Przypisujesz na onchange funkcje, która przy każdej zmianie pobiera wartość inputa o id=id1 i wpisuje jego wartość do inputa o id=id2. 'this' wykorzystane w środku funkcji odnosi się do elementu, na którym się wykonał handler - czyli input o id=id1. |
Forum: Przedszkole · Podgląd postu: #1165263 · Odpowiedzi: 10 · Wyświetleń: 792 |
Napisane: 16.07.2015, 11:43:47 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
1. Stwórz kolekcję wszystkich translacji, np [ ż => rz, i => j, rz => ż, j => i ] 2. Potnij swój tekst na tablicę wg kluczy w kolekcji translacji, czyli z "żoliborz" powinno powstać [ żol, ibo, rz ] oraz "odwróconą" tablicę [ rzol, jbo, ż ] 3. Wygeneruj wszystkie binarne ciągi o długości równej ilości elementu w tablicy z pkt. 2, czyli dla żoliborza będą to kombinacje wartości 3: 000, 001, 010, 011, 100, 101, 110, 111 4. Dla każdego ciągu binarnego w miejscu 0 wstaw fragment tekstu z pierwszej tablicy, dla 1 wstaw fragment tekstu drugiej tablicy np. dla 101 to będzie "rzoliboż" Zalety: - zadziała dla każdego rozbudowanego tekstu - teksty generowane są na życzenie, wieć nie trzeba ich trzymać w pamięci cały czas - tworzysz tekst z ciągu binarnego kiedy go potrzebujesz - potem go zapominasz - brak uzycia regexpa - brak użycia drogich funkcji operujących na stringach (oprócz exploda na początku) Czy jes to najlepsze rozwiazanie? Nie wiem, ale to pierwsze co mi przyszło do głowy dla generacji tekstu i moim zdaniem nadaje się. Przetestuj. Jeżeli jednak potrzbujesz tej generacji do stworzenia regexpa, czyli nie po to by generować słowa, a raczej sprawdzać czy są poprawne (nie licząc błędów ortograficznych) to wtedy jest nawet prościej bo zamiast pocinać tablicę możesz od razu podmieniać wartości wg kolekcji translacji. Czyli np jak masz j=>i to każde j podmienić należy na (j|i). |
Forum: PHP · Podgląd postu: #1165243 · Odpowiedzi: 3 · Wyświetleń: 390 |
Napisane: 4.06.2015, 22:01:17 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Możesz to zrobić na socketach lub long-polling. Sockety będą w tym przypadku TROCHĘ wydajniejsze, ale wątpię by była to znacząca różnica. Z drugiej strony Sockety to kolejna rozbudowana warstwa abstrakcji w Twojej aplikacji - musisz sam zadecydować co jest dla Ciebie istotniejsze. Osobiście wybrałbym long-polling jeśli nie miałbym zastosowania dla socketów żadnego poza tym chatem. Backend standardowo, cache + db. Jako bazę danych wybrałbym SQLite albo jakiś NoSQL, będący osobną bazą danych od całej aplikacji, by w razie potrzeb można było przenieść sam serwer obsługujący ten czat. |
Forum: PHP · Podgląd postu: #1160521 · Odpowiedzi: 1 · Wyświetleń: 358 |
Napisane: 26.05.2015, 21:31:32 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
1. Dodaj cache'owanie wyników z bazy danych - np takie rzeczy jak stolice przecież się nie zmienieją prędko, możesz spokojnie zapamiętywać 2. Zainteresuj się cache'owaniem HTTP i/lub reverse proxy 3. Pomyśl, może warto zrobić cache po stronie frontu 4. Dodaj opóźnienie na keyup, niech request wysyła się po jakimś czasie od wciśnięcia klawisza, nie od razu 5. Mówisz, że masz 3 requesty + PHP po środku - przerób to na 1 request |
Forum: MySQL · Podgląd postu: #1159562 · Odpowiedzi: 25 · Wyświetleń: 1 597 |
Napisane: 22.03.2015, 14:49:51 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
catch łapie pierwszy pasujący exception, jak zmienisz kolejność z catch(Exception); catch(newException); na catch(newException); catch(Exception); to wszytko będzie ładnie działać. Zasada jest taka, że bloki catch definiujesz od najbardziej specyficznych wyjątków to tych najbardziej ogólnych. |
Forum: Przedszkole · Podgląd postu: #1150773 · Odpowiedzi: 12 · Wyświetleń: 227 |
Napisane: 22.03.2015, 14:11:21 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Każda pętla się do tego nada, ponieważ to co opisałeś to właśnie przypadek użycia pętli... Ludzie, choć trochę asertywności, naprawdę. Kod for ($ouput = false; $output !== true; ) { $output = doSmth(); } Kod $output = false; while ($output !== true) { $output = doSmth(); } Kod do { $output = doSmth(); } while($output !== true); |
Forum: Przedszkole · Podgląd postu: #1150764 · Odpowiedzi: 6 · Wyświetleń: 305 |
Napisane: 14.03.2015, 14:22:27 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Poszukaj coś na temat: - ajax long-polling - websocket - flashsocket I wybierz najbardziej pasującą dla Ciebie opcję |
Forum: Przedszkole · Podgląd postu: #1149642 · Odpowiedzi: 1 · Wyświetleń: 245 |
Napisane: 11.11.2010, 19:43:11 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Bardzo prosto - ORDER BY type + pętla w PHPie, która będzie porównywała type rekordów. Jeżeli type ostatnio porównywanego rekordu z obecnym jest inne, to doda jakąś linię czy coś takiego by oddzielić grupy. Zależy od twojej inwencji. |
Forum: Przedszkole · Podgląd postu: #806455 · Odpowiedzi: 3 · Wyświetleń: 866 |
Napisane: 31.10.2010, 16:38:36 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Tak, możesz osobno ustawiać obramowanie dla każdej strony za pomocą border-top, border-left, border-right, border-bottom lub też ustawić najpierw ogólnie za pomocą border a potem usunąć górną ustawiając odpowiednią szerokość (0) lub styl obramowania w border-top. |
Forum: Przedszkole · Podgląd postu: #802609 · Odpowiedzi: 3 · Wyświetleń: 529 |
Napisane: 9.10.2010, 18:58:26 | |
Grupa: Zarejestrowani Postów: 555 Dołączył: 20.02.2008 Skąd: Małopolska Ostrzeżenie: (0%) |
Raczej nie powinno być problemów - ale sprawdź - a jak będą to zablokuj Chrome'owi i Safari możliwość rozszerzania pola tekstowego za pomocą CSS: Kod resize: none; |
Forum: Przedszkole · Podgląd postu: #796692 · Odpowiedzi: 7 · Wyświetleń: 1 133 |
Nowe odpowiedzi Brak nowych odpowiedzi Popularny temat (Nowe) Popularny temat (Brak nowych) |
Sonda (Nowe) Sonda (Brak nowych) Zamknięty temat Przeniesiony temat |
Wersja Lo-Fi | Aktualny czas: 18.04.2024 - 13:33 |