Autor Wątek: PHP/*ServerPages vs C++/C#/Java  (Przeczytany 30086 razy)

Offline BTM

  • Użytkownik

# Kwiecień 30, 2007, 16:58:35
Jeśli robisz dla kogoś to masz to zrobić szybko, możliwie bezblędnie i z użyciem standardowych narzędzi, żeby ten odbiorca mógł w razie czego skutecznie poszukać sobie innego wykonawcy. W takich sytuacjach wszelki frameworki, gotowe bajery są jak najbardziej wskazane.
Błąd ;-)

Pisząc aplikacje starasz się używać tego kodu, który znasz - nie rzucisz w klienta jakimś RoR, tylko dlatego, że zna go dużo ludzi - robisz kod swój - by klient wiedział za co płaci i jeżeli coś popsuje / będzie chciał zmienić to wrócił do Ciebie - i to u Ciebie zostawił pieniążki ;-)

Ogólnie śmieszy mnie popularne stwierdzenie, że aplikacje w PHP są proste i trywialne, bo język jest "łatwy" - każdemu takiemu człowiekowi mogę pokazać i prostą aplikację w C++ i zawiłego chińskiego smoka w PHP ( nie "spaghetii code" tylko rozbudowana aplikacja. ) Przykład podanego phpBB jest lekko chybiony - no chyba że w gałęzi 3.0 są jakieś zmiany, bo z tego co pamiętam to w 2.x obiektowość raczkuje. ( Że już o takich masakrach jak phpAuctionXL [ podstawowy silnik Allegro ] czy osCommerce nie wspomnę - the horror ;D ) .

Jak ktoś już wspomniał, przy odrobinie zaparcia da się zrobić co się chce na dowolnej platformie, ale chyba śrendio logicznym jest robienie poklatkowego FPS'a wypluwanego do GIF'a w PHP? :>

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Goliatus

  • Użytkownik
    • Warsztat - tworzenie gier

# Kwiecień 30, 2007, 17:01:39
mINA87: Ja się nie zagłębiam w to jak jest interpretowane PHP, tylko co robią funkcje, które wywołuje z PHP. Miałem problem z sendmailem, bo był niestandardowy serwer SMTP. Gdyby nie to, że przekopałem się przez odpowiedni plik źródłowy odpowiedniego exta w php, to bym nie wiedział jak rozwiązać pewien problem. To jest właśnie problem PHP, że masa funkcji jest na twardo wmontowana w ten język. Dokumentacja taka rewelacyjna nie jest.

Cytuj
Wątpię żebyś mógł tak pięknie zrzucić sobie cały wątek w środowisku uruchomieniowym już u klienta na serwie i zdebugować to lokalnie
Najprościej w ten sposób: http://java.sun.com/javase/technologies/core/toolsapis/jpda/
To jest fajna sprawa jeśli możesz coś zdalnie debugować w swoim ulubionym IDE na żywo bez blokowania działania całej strony.

Cytat: BTM
Pisząc aplikacje starasz się używać tego kodu, który znasz - nie rzucisz w klienta jakimś RoR, tylko dlatego, że zna go dużo ludzi - robisz kod swój - by klient wiedział za co płaci i jeżeli coś popsuje / będzie chciał zmienić to wrócił do Ciebie - i to u Ciebie zostawił pieniążki ;-)
No ja nie popieram takiego podejścia, bo sam niechciałbym być w podobnej sytuacji w jakiejś innej dziedzinie życia np. w edukacji(zmiana uczelni, transfer ocen).
« Ostatnia zmiana: Kwiecień 30, 2007, 17:09:23 wysłana przez Goliatus »

Offline mINA87

  • Użytkownik

# Kwiecień 30, 2007, 17:13:20
BTM: A ja bym powiedział że chodzi o czas i koszty własne i dlatego pisze się na syzbko i przy standardowych frameworkach - tak jak mówił Goaliatus. Z Twoim kodem jest tylko problem, bo sprzedasz go jednemu, przepiszesz prawa i lipa. Poza tym klient kupuje aplikacje, wdraża ją i .. ma wykonawce głęboko w poważaniu dopóki wszystko jest ok przez najbliższy rok/kilka lat a po tym okresie czasu wybór wykonawcy jest dokonywany od nowa i tyle.
Odnośnie phpBB to pisałem że jest to przecież kod strukturalny :P I dlatego to takie spaghetti - nie że zamotany, bo jest prosty i czytelny jak drut, ale ciągnie się i ciągnie i ciągnie i wszystko w osobnej niteczce.
phpBB 3 chyba już jest troszkę obiektowy.. Nie pamiętam bo nie zagłębiałem się aż tak.
Generalnie jak dotąd najmilej wspominam zabawę z kodem iPB. Przy MediaWiki momentami przeklinałem tą obiektowość :P

Goliatus: hmm no nie wiem czy takie wmontowanie na twardo funkcji to problem czy zaleta :] A rozwiązania nietypowe mają to do siebie że trzeba je rozwiązywać nietypowo i koniec - nie ma co narzekać na to że rozwiązanie standardowe nie udostępnia 23 callbacków, które wszystkie musimy zaimplementować żeby zrobić prostego str_replace'a. Odnośnie przekopywania się przez źródła PHP - masakra... Gdyby nie CodeSearch google'a to bym się pociał momentami.
Odnośnie dokumentacji to nie rozumiem dlaczego - co masz jej do zarzucenia? Ja naprawdę niewiele rzeczy znajduje które powinny tam być a ich nie ma.
Hmmm co do tej Javy to ciekawe, zastanawia mnie tylko czy nie generuje to dodatkowych narzutów wydajnościowych i problemów z bezpieczeństwem przez co ciężko spotkać środowisko wdrożeniowe w którym taki mechanizm funkcjonuje - jak to jest? Hmm Zend umożliwia podobny motyw, ale niestety w jego przypadku strasznie ciężko dorwać jakikolwiek nie swój serwer oferujący to :P

Offline peter

  • Użytkownik
    • BirdStorm.net browser based MMO

# Kwiecień 30, 2007, 17:28:04
@miNA87:
zgadzam sie, ze taki np sklep internetowy i ogolnie wiekszosc prostych lub standardowych stron lepiej pisac w PHP niz w C++, a jeszcze lepiej jak zasugerowal Goliatus przerobic gotowca.
ale watek zostal wytciety z innego, w ktorym byla mowa o pisaniu gry - a to zdaje sie jest dosc specjalistyczna aplikacja.
Sam jakis czas temu zabralem sie za tworzenie gry przez www - silnik postanowilem napisac w C++ i jakos do dzis nie zaluje, owszem projekt nie jest jeszcze skonczony, ale wydaje mi sie ze zaszedlem juz wystarczajaco daleko, zeby samemu stwierdzic czy byla to dobra decyzja.
Owszem nie mialem jak w PHP podanego na tacy zarzadzania sesjami, etc, ale to tak naprawde niewielki ulamek z calosci kodu... zreszta wiekszosc z tych rzeczy napisalem sobie akurat w pythonie, tak zeby w silniku skupic sie glownie na merytoryce.
wspomniales o frameworku dla C++ - dla mnie idealem byla by tu po prostu obiektowa baza danych + jakis ORB (niekoniecznie corbowy) albo cos innego opartego o technologie komponentowa, do tego wystarczy dopisac sesje i inne tego typu duperele i byloby to naprawde potezne narzedzie... prawde mowiac aktualna gre traktuje jako poligon i po skonczeniu powarznie zastanowie sie czy czegos takiego nie napisac.

edit:
a i jeszcze jedno - osbiscie nie przepadam za wpomnianym przez ciebie MVC... mozesz mnie posadzic o herezje, ale jak dla mnie za malo odziela logike od prezentacji

@Goliatus
w 100% zgadzam sie z argumentami dotyczcacymi nauki i satysfakcji - terminow to ja musze przestrzegac w robocie, a w domu chce robic cos co naprawde sprawia mi frajde ;)
« Ostatnia zmiana: Kwiecień 30, 2007, 17:44:45 wysłana przez peter »

Offline Goliatus

  • Użytkownik
    • Warsztat - tworzenie gier

# Kwiecień 30, 2007, 17:36:42
miNA87: Problem dokumentacji PHP jest taki, że nie jest tak funkcjonalna jak Javadoc. Płaski zbiór wmontowanych na twardo i opisanych mniej lub bardziej konkretnie funkcji. To jest właśnie sedno sprawy: PHP miało być czymś prostym, do nieskomplikowanych zastosowań, ale została do niego dorobiona filozofia, zostało wyciągnięte za uszy na głęboką wodę. Na przykład w PHP nie została zaprojektowana wielowątkowość, dopiero później to do całości w postaci kilku funkcji. W przypadku gierek przez WWW wielowątkowość jest niezbędna i nie chodzi tutaj o odpalanie skryptów przez Crona :)

Cytuj
Hmmm co do tej Javy to ciekawe, zastanawia mnie tylko czy nie generuje to dodatkowych narzutów wydajnościowych i problemów z bezpieczeństwem przez co ciężko spotkać środowisko wdrożeniowe w którym taki mechanizm funkcjonuje - jak to jest?
Używa się tego tylko wtedy, gdy jest taka konieczność, pojawia się jakiś problem, którego nie można odtworzyć w środowisku testowym. Odpalasz wtedy JVM z odpowiednimi opcjami.
« Ostatnia zmiana: Kwiecień 30, 2007, 17:39:06 wysłana przez Goliatus »

Offline mINA87

  • Użytkownik

# Kwiecień 30, 2007, 17:46:25
peter: Hmm ja po prostu nie widzę zysku w pisaniu w C++ :] Podejście zwykła gra vs gra w takim środowisku narzuca samo w sobie wiele spraw - np. oparcie o model rządanie->odpowiedź, wykorzystanie technologii bazo danowych, krótki life-cycle obiektów, ogromne obciążenie związane z obsługą dużej ilości klientów itp itd.
W związku z tym trzeba inaczej zaprojektować grę online a inaczej gre offline. Teraz dochodzimy do sedna sprawy - w C++ łatwo się pisze aplikacje offline - jest to wygodne i łatwo się wpasować w taki projekcik takim językiem, jednak gdy mowa o aplikacjach webowych - PHP zapewnia Ci naprawdę dużo w elastyczny sposób, a w żaden sposób Cię nie ogranicza przez co projekt taki można zrealizować o niebo szybciej niż w C++. Poza tym jeszcze pozostaje kwestia samego procesu developingu aplikacji web vs offline - tutaj też wszystko przemawia na korzyść PHP'a - łatwiej takie coś przenieść gdziekolwiek, strasznie szybko można zmodyfikować, postawić itp.
Aby podsumować - fajna zabawa może to i jest, ale strasznie customowa i żmudna. Może po prostu za dużo piszę w kwestii aplikacji webowych i strasznie dużo nad tym pracuję i dlatego cenię sobie wygodę pracy w takim środowisku (nie mówię że jest wygodnie, bo jest cholernie niewygodnie, ale chodzi mi o to, żeby było jak najwygodniej) i może właśnie dlatego jak nie porzucę tego wszystkiego w diabły to zainteresuje się JSP/ASP.NET.

Goliatus: hmm chyba chodzi po prostu o inne podejście do całej sprawy, inny wygląd bibliotek itp. Jeśli nie wiesz czego szukać to może Javadoc jest fajny, ale w PHPie jeśli wiesz czego szukać, jakiejś refki funkcji czy opisu parametrów to wklepujesz i masz - z przykładami i ładnym opisem.
Odnośnie wielowątkowości, to ja nie dostrzegam problemu - operacje plikowe załatwia się wersjami bezpiecznymi a resztę spraw to rola bazy danych i tyle.
Odnoście tego debuggingu - czyli nie nadaje się to do developingu on-the-fly, ale i tak ciekawe dosyć. Ehh muszę się w  końcu wziąć za to cholerne JSP.

//edit: Podam jeszcze taki przykładzik - np. po co w grze opartej o model request->response basen obiektów, kolejka komunikatów czy bardzo rozległe hierarchia obiektów, skoro i tak dąży się do integralności i ujednolicenia danych? Większość tych rzeczy załatwia się po prostu na bazie danych i koniec. Im więcej załatwia się relacjami i po stronie bazy, tym wydajniejsze, łatwiejsze w czytaniu i pisaniu jest to wszystko. Aplikacja webowa to aplikacja webowa czy to sklep, cms, forum czy gra - podejście jest niemal to samo.
« Ostatnia zmiana: Kwiecień 30, 2007, 17:57:20 wysłana przez mINA87 »

Offline Goliatus

  • Użytkownik
    • Warsztat - tworzenie gier

# Kwiecień 30, 2007, 17:57:43
Cytuj
Ehh muszę się w  końcu wziąć za to cholerne JSP.
Ale ja nie mówie o JSP tylko o pisaniu servleta w oparciu o jakiś framework lub nie.

Cytuj
Odnośnie wielowątkowości, to ja nie dostrzegam problemu - operacje plikowe załatwia się wersjami bezpiecznymi a resztę spraw to rola bazy danych i tyle.
Właśnie to nie jest tylko rola bazy danych. Jeśli wszystkie operacje oprzesz na bazie danych to zginiesz na polu wydajności. Operacje na pamięci są nieporównanie szybsze od operacji na dysku spowolnianych przez MVCC. Dyskowa baza danych nie jest idealnym i jedynym słusznym rozwiązaniem.
« Ostatnia zmiana: Kwiecień 30, 2007, 17:59:55 wysłana przez Goliatus »

Offline mINA87

  • Użytkownik

# Kwiecień 30, 2007, 18:02:26
Ale ja nie mówie o JSP tylko o pisaniu servleta w oparciu o jakiś framework lub nie.
No ale muszę się wziąć za JSP w pierwszej kolejności, a później za servlety :]

Właśnie to nie jest tylko rola bazy danych. Jeśli wszystkie operacje oprzesz na bazie danych to zginiesz na polu wydajności. Operacje na pamięci są nieporównanie szybsze od operacji na dysku spowolnianych przez MVCC. Dyskowa baza danych nie jest idealnym i jedynym słusznym rozwiązaniem.
No mnie się wydaje, że dobra baza danych powinna cache'ować dane i bardzo optymalnie wykonywać wszystkie operacje (właśnie m.in. zająć się operacjami konfliktowymi), bo z Twoim podejściem zaczniesz implementować swoją własną customową bazę danych w pewnym miejscu :] Imho gra nie warta świeczki.

Offline Goliatus

  • Użytkownik
    • Warsztat - tworzenie gier

# Kwiecień 30, 2007, 18:05:48
Cytat: miNA87
No mnie się wydaje, że dobra baza danych powinna cache'ować dane i bardzo optymalnie wykonywać wszystkie operacje (właśnie m.in. zająć się operacjami konfliktowymi), bo z Twoim podejściem zaczniesz implementować swoją własną customową bazę danych w pewnym miejscu :] Imho gra nie warta świeczki.
Tak? To wejdź na www.hibernate.org i im to powiedz :)

Offline mINA87

  • Użytkownik

# Kwiecień 30, 2007, 18:13:57
Nie wiem co to jest, bo spojrzałem bardzo pobieżnie, ale wygląda mi na framework oferujący funkcjonalność obiektowej bazy danych dbających ładnie o serializację i life-cycle obiektów i na pewno jest to cholernie wydajne w stosunku do klasycznej relacyjnej bazki danych, ale kilka spraw:
- sam takiego czegoś raczje nie będziesz pisał od zera, a o tym rozmawiamy
- jeśli się decydujemy na takie coś to sporo kosztuje
- wydaje mi się że w klasycznych zastosowaniach przyrost wydajności w stosunku do dobrej (co najmniej MySQL 5.0 z SP, PgSQL lub PL/SQL)  relacyjnej bazy danych z której korzystamy z głową (optymalne zapytania, struktura tabeli, wykorzystanie storage'ów takich jak cache czy memory) nie będzie odczuwalny, a możemy sami napisać coś takiego bardzo szybko w oparciu o takie podejście.
Dużo toto ma w ogóle realizacji i możesz to jakoś przybliżyć Goliatus?

Offline peter

  • Użytkownik
    • BirdStorm.net browser based MMO

# Kwiecień 30, 2007, 18:14:01
peter: Hmm ja po prostu nie widzę zysku w pisaniu w C++ :] Podejście zwykła gra vs gra w takim środowisku narzuca samo w sobie wiele spraw - np. oparcie o model rządanie->odpowiedź, wykorzystanie technologii bazo danowych, krótki life-cycle obiektów, ogromne obciążenie związane z obsługą dużej ilości klientów itp itd.
W związku z tym trzeba inaczej zaprojektować grę online a inaczej gre offline. Teraz dochodzimy do sedna sprawy - w C++ łatwo się pisze aplikacje offline - jest to wygodne i łatwo się wpasować w taki projekcik takim językiem, jednak gdy mowa o aplikacjach webowych - PHP zapewnia Ci naprawdę dużo w elastyczny sposób, a w żaden sposób Cię nie ogranicza przez co projekt taki można zrealizować o niebo szybciej niż w C++. Poza tym jeszcze pozostaje kwestia samego procesu developingu aplikacji web vs offline - tutaj też wszystko przemawia na korzyść PHP'a - łatwiej takie coś przenieść gdziekolwiek, strasznie szybko można zmodyfikować, postawić itp.
Aby podsumować - fajna zabawa może to i jest, ale strasznie customowa i żmudna. Może po prostu za dużo piszę w kwestii aplikacji webowych i strasznie dużo nad tym pracuję i dlatego cenię sobie wygodę pracy w takim środowisku (nie mówię że jest wygodnie, bo jest cholernie niewygodnie, ale chodzi mi o to, żeby było jak najwygodniej) i może właśnie dlatego jak nie porzucę tego wszystkiego w diabły to zainteresuje się JSP/ASP.NET.
nie chodzi tylko o zabawe (choc to tez), ale dokladnie o to o czym sam mowisz - inaczej pisze sie gre offline, a inaczej online (trudniej!) - caly numer polega na tym, zeby projekt urzadzic sobie tak, zeby piszac czesci odpowiedzialne za merytoryke gry pisac tak jakby byla to aplikacja offline (a takie jak sam zawazyles pisze sie lepiej w C++) i nie przejmowac sie w niej pobieraniem danych z bazy, czy przesylaniem ich przez siec.
dochodza tez elementy wydajnosciowe - i nie mam tu na mysli roznicy miedzy samymi wynikami (a w kazdym razie nie to jest najwazniejsze), ale np fakt, ze w C++ mozemy napisac serwer ktory bedzie chodzil non stop i caechowal duza czesc danych zamiast caly czas pobierac je z dysku.
kolejna sprawa to co napisal juz Goliatus - jak wyobrarzasz sobie zdarzenia w grze? bo cron to raczej malo wygodne narzedzie do tego celu...

Offline peter

  • Użytkownik
    • BirdStorm.net browser based MMO

# Kwiecień 30, 2007, 18:19:16
Nie wiem co to jest, bo spojrzałem bardzo pobieżnie, ale wygląda mi na framework oferujący funkcjonalność obiektowej bazy danych dbających ładnie o serializację i life-cycle obiektów i na pewno jest to cholernie wydajne w stosunku do klasycznej relacyjnej bazki danych, ale kilka spraw:
- sam takiego czegoś raczje nie będziesz pisał od zera, a o tym rozmawiamy
- jeśli się decydujemy na takie coś to sporo kosztuje
- wydaje mi się że w klasycznych zastosowaniach przyrost wydajności w stosunku do dobrej (co najmniej MySQL 5.0 z SP, PgSQL lub PL/SQL)  relacyjnej bazy danych z której korzystamy z głową (optymalne zapytania, struktura tabeli, wykorzystanie storage'ów takich jak cache czy memory) nie będzie odczuwalny, a możemy sami napisać coś takiego bardzo szybko w oparciu o takie podejście.
Dużo toto ma w ogóle realizacji i możesz to jakoś przybliżyć Goliatus?
hibernate jest rozwijany jako opensource wiec nie kosztuje za wiele.
w kilku slowach da sie o nim powiedziec, ze jest swietnie zorganizowana obiektowa baza danych
poza tym najpierw piszesz, ze samemu sie tego nie napisze, a potem twierdzisz, ze "możemy sami napisać coś takiego bardzo szybko w oparciu o takie podejście.", prawde mowiac nie do konca rozumiem.

Offline mINA87

  • Użytkownik

# Kwiecień 30, 2007, 18:24:36
Hmm OpenSource - ciekawe, ale właśnie do języków obiektowych i pod ich kątem, a niestety te są ciągle zbyt rzadko wykorzystywane - dominuje PHP i klasyczny ASP, a nawet w przypadku ASP .NET, JSP czy servletów stosuje się bazki relacyjne, cyzli jednak dopiero to wchodzi i koszty wdrożenia tego są pewnie jakieś tam.

Mam na myśli że takiego Hibernate'a nie będziesz sobie implementował we własnym zakresie raczej używając servletów, Ruby czy cokolwiek co daje Ci state preserving na jakimś sensownym poziomie, bo rozmawialiśmy o wydajnym podejściu czysto konsumpcyjnym w kontekście relacyjnych baz danych i miałem na myśli, że można napisać wydajne rozwiązanie w oparciu o dobrze użyte bazki relacyjne.

Offline peter

  • Użytkownik
    • BirdStorm.net browser based MMO

# Kwiecień 30, 2007, 18:31:29
Mam na myśli że takiego Hibernate'a nie będziesz sobie implementował we własnym zakresie raczej używając servletów, Ruby czy cokolwiek co daje Ci state preserving na jakimś sensownym poziomie, bo rozmawialiśmy o wydajnym podejściu czysto konsumpcyjnym w kontekście relacyjnych baz danych i miałem na myśli, że można napisać wydajne rozwiązanie w oparciu o dobrze użyte bazki relacyjne.
chyba juz rozumiem, skad to nieporozumienie - otoz hibernate to wlasnie rozwiazanie, ktore bazuje na relacyjnej bazie danych (samemu mozesz wybrac jakiej konkretnie)

Offline Goliatus

  • Użytkownik
    • Warsztat - tworzenie gier

# Kwiecień 30, 2007, 18:33:51
Nie wiem co to jest, bo spojrzałem bardzo pobieżnie, ale wygląda mi na framework oferujący funkcjonalność obiektowej bazy danych dbających ładnie o serializację i life-cycle obiektów i na pewno jest to cholernie wydajne w stosunku do klasycznej relacyjnej bazki danych, ale kilka spraw:
- sam takiego czegoś raczje nie będziesz pisał od zera, a o tym rozmawiamy
- jeśli się decydujemy na takie coś to sporo kosztuje
- wydaje mi się że w klasycznych zastosowaniach przyrost wydajności w stosunku do dobrej (co najmniej MySQL 5.0 z SP, PgSQL lub PL/SQL)  relacyjnej bazy danych z której korzystamy z głową (optymalne zapytania, struktura tabeli, wykorzystanie storage'ów takich jak cache czy memory) nie będzie odczuwalny, a możemy sami napisać coś takiego bardzo szybko w oparciu o takie podejście.
Dużo toto ma w ogóle realizacji i możesz to jakoś przybliżyć Goliatus?
Napisałeś, że tworzenie warstwy(bo Hibernate to jest właśnie taka warstwa) pomiędzy aplikacją a bazą danych, to gra niewarta świeczki. Tym linkiem chciałem pokazać, że istnieje pewien trend wyznawany przez sporą grupę ludzi, którzy z programowania żyją.

Ja tego nie używam, bo potrafię stworzyć własne skrojone na miarę i nie lubię zabawy w konfigurowanie cudzych komponentów. Być może, gdybym nie tworzył dla siebie tylko dla kogoś, to bym tego używał, bo rozwijanie własnych zabawek byłoby czasowo nieopłacalne. Zrobienie takiej warstwy to nie jest przecież żadna sztuka. Co w tym może być trudnego?

P.S I nie będę się licytował na ilość wdrożeń, bo mnie to zagadnienie średnio interesuje
« Ostatnia zmiana: Kwiecień 30, 2007, 18:36:54 wysłana przez Goliatus »