Anatomia żądań internetowych – perspektywa PHP


Ten post na blogu jest DARMOWYM rozdziałem z książki Jump Start PHP Environment autorstwa Bruno Skvorca.

Ważne jest, aby zrozumieć podstawowe pojęcia i procesy programowania sieciowego, zanim przejdziemy do drobiazgowych szczegółów kodowania w PHP. co ten rozdział osiąga.

Przed przedstawieniem tekstu z rozdziału zadaliśmy Bruno kilka pytań.

HostAdvice: Co skłoniło Cię do napisania tej książki?
Bruno Skvorc: Chciałem napisać książkę, która dotyczy rzeczy, które uniemożliwiają większości ludziom prawidłowe rozpoczęcie pracy z PHP – konfiguracji, która pojawia się przed rzeczywistym kodem. Jakiego oprogramowania potrzebujesz? Dlaczego? Dlaczego nie X, a zamiast tego Y? Jak osiągnąć identyczną konfigurację podczas wdrażania aplikacji na żywo i jak wykorzystać, aby dopasować różne elementy w całym zespole. Zasadniczo chciałem wyjaśnić "infrastruktura" PHP w ogóle i aplikacji PHP, w sposób, który czyści wszystko i tworzy solidne podstawy, na których można zacząć kodować we właściwy sposób.

HostAdvice: Jaką nową wiedzę zdobyłeś podczas pisania książki?
Bruno Skvorc: Dowiedziałem się, że książki techniczne stają się przestarzałe nawet szybciej, niż pierwotnie się spodziewałem. Odpowiadając na pytania dotyczące procedury konfiguracji, która pojawiła się z powodu drobnych zmian w używanym oprogramowaniu, dowiedziałam się, że instrukcje muszą być tak szerokie i uniwersalne, jak to możliwe, zachowując jednocześnie jasność i skupienie. To była najtrudniejsza część – uczynienie instrukcji ponadczasowymi, biorąc pod uwagę, jak wrażliwe na czas jest oprogramowanie, którego używamy. Obecnie przygotowuję aktualizację książki, która odnosi się do większości tych zmian w sposób ciągły.

HostAdvice: Wszelkie inne porady dla naszych czytelników?
Bruno Skvorc: Biorąc pod uwagę, że omawiam w książce niektóre podejścia do hostingu i sposoby, aby serwery działały dla Ciebie zamiast na odwrót, uważam, że ta książka byłaby doskonałym źródłem informacji dla odwiedzających Hostadvice – zwłaszcza, że ​​wyjaśniam, dlaczego hosting współdzielony (chociaż ja używaj go także do niektórych rzeczy) nie jest obecnie całkiem przyzwoitą opcją. Jest to szczególnie prawdziwe, ponieważ omawiam w tej książce wszystkie najbardziej podstawowe umiejętności związane z Linuksem i uczę ludzi, jak samodzielnie przeprowadzić podstawową konserwację serwera. Uzbrojeni w te umiejętności użytkownicy mogą łatwo skonfigurować o wiele potężniejszą maszynę niż współużytkowaną maszynę hostującą i uruchamiać na niej wszelkiego rodzaju oprogramowanie – bez ograniczeń narzuconych przez firmę, za którą płacisz, za uruchamianie rzeczy za Ciebie.

Anatomia żądań internetowych

Zanim przejdziemy do drobiazgów związanych z konfigurowaniem dobrego środowiska PHP, musisz zrozumieć, jak faktycznie działają żądania sieciowe. W tym rozdziale wyjaśnimy, co się stanie, gdy przebijesz adres internetowy przeglądarki i otrzymasz wynik. My’Nie będę zbyt techniczny ―’nie musisz wyjaśniać śrub i nakrętek, ponieważ prawdopodobnie tylko by Cię to zmyliło. Zamiast tego będzie to przyjazne dla początkujących wyjaśnienie, w jaki sposób wszystkie różne aspekty tworzenia stron internetowych i ich konsumpcji łączą się, tworząc sieć, którą znasz i kochasz. Głównym celem tego rozdziału jest nauczenie cię, gdzie ma zastosowanie Twój wybrany język programowania (w tym przypadku PHP) i na jakie części tajemniczego żądania internetowego wpływa.

Jeśli znasz podstawy Internetu i znasz terminy wymienione w poprzednim akapicie, możesz przejść do następnego rozdziału.

Klient i serwer

Musiałeś słyszeć o warunkach “programowanie po stronie klienta” i “programowanie po stronie serwera,” przynajmniej w ogłoszeniach o pracę. W tej części my’Wyjaśnię je krótko, zanim przejdę do szczegółów.

Co to jest klient??

ZA klient to twoja przeglądarka internetowa.

W kontekście sieci, z technicznego punktu widzenia, jesteś klientem
sens słowa (robisz prośbę i jest obsługiwany przez oprogramowanie), przeglądarka jest uważana za oprogramowanie klienckie zwykłem prosić serwer o coś.

Kiedy to otrzyma “coś” (najczęściej jest to wiązka tekstu) decyduje o tym, jak powinien być Ci przedstawiony, ostateczny klient.

Co to jest serwer??

Podobnie do klienta, a serwer ma również dwa znaczenia:

  1. program, który odpowiada na pytania zadane przez klienta
  2. komputer (fizyczna maszyna), na którym zainstalowany jest program serwera

W tej książce oraz w kontekście tworzenia stron internetowych mamy na myśli pierwsze z nich.

W rzeczywistości w całej tej książce’Dowiemy się, w jaki sposób możemy łatwo zainstalować program serwera na naszym komputerze “udawanie Internetu” i pozwalając komputerowi myśleć o witrynie, którą my’ponowne tworzenie jest dostępne online i dostępne dla wszystkich.

Pozwolić’Spójrzmy na pierwszy punkt nieco więcej: jak program odpowiada na pytania?

Krótko mówiąc, serwer czeka na takie pytanie jak “daj mi tekst posta na blogu
od 14 lutego” i odpowiada albo “OK, tutaj: [trochę HTML, zawierający tekst danego postu]” lub “Wybacz mogę’znajdź to tam’nic poniżej 14 lutego.” Trzeba przyznać, że ja’parowanie, ale to’mniej więcej to, co się dzieje.

ja’zilustrowałem to na rysunku 1.1.

Anatomia żądań internetowych Rycina 1.1. Uproszczone żądanie do serwera i jego odpowiedź

Tworzenie stron internetowych jest w rzeczywistości stosunkowo prostą sprawą, aby klient zadał właściwe pytania i uczył serwer udzielania właściwych odpowiedzi. Gotowy, by wejść trochę głębiej do króliczej nory?
Tutaj idzie …

Podstawy żądania internetowego

Podczas żądanie sieciowe ma bardzo konkretne znaczenie, często jest używany jako ogólny termin do komunikacji między klientem a serwerem. Cały proces komunikacji został starannie wyjaśniony na rysunku 1.2, uroczym komiksie autorstwa VladStudio.

Anatomia żądań internetowychRycina 1.2. Jak działa Internet VladStudio

Jak to wszystko działa

Pozwolić’s przełam komiks z ryc. 1.2.

Jesteś użytkownikiem ― jesteś królem. Wydajesz polecenia, a przeglądarka słucha radośnie. Jako użytkownik tutaj kończy się Twoja świadomość procesu i następnym razem Ty’Re świadomie adresowane jest w przedostatniej ramce komiksu. Cały proces pomiędzy nimi jest dla ciebie niewidoczny, z wyjątkiem ciebie’jesteś programistą; wtedy ty’jesteś królem magicznym magiem, który wszystko widzi’dzieje się, ale więcej o tym w późniejszych rozdziałach.

Przeglądarka przechodzi przez zaporę ogniową, co zwykle jest oczywiste. Prawdopodobnie masz teraz jakiś firewall na komputerze lub w routerze / modemie. Przeglądarka wie, jak przez to przejść, ponieważ Ty’Powiedziałem strażnikowi, że przeglądarka jest w porządku i powinna zostać przepuszczona.

Potem przychodzi część my’jeszcze nie wspominając: DNS (system nazw domen) serwery – część tak mistyczna i niedostępna dla większości, ogromna większość użytkowników Internetu (a nawet programiści!) przyjmuje to za pewnik, akceptuje fakt, że istnieje i nie martwi się zbytnio o to. Ogólny konsensus wydaje się być taki, że podobnie jak pytania o sens życia, pytania o pochodzenie czasu i przestrzeni oraz nieziemską smakowitość masła orzechowego i kombinacji bananów, niektóre rzeczy – na przykład pochodzenie i cel serwerów DNS – są takie lepiej pozostawić bez wątpliwości. Jeśli nadal chcesz wiedzieć, czym one są, zostaną wyjaśnione w części o nazwie “Dla tych, którzy chcą więcej” na końcu tego rozdziału bardziej szczegółowo.

Krótko mówiąc, tak działają. Każdy domena w Internecie (jak “przyklad.com”) jest powiązany z określonym adresem IP (reprezentowanym przez cyfry na drogowskazie w trzeciej ramce komiksu). Na adres IP jest zbiorem liczb identyfikujących dany serwer; Adresy IP informują przeglądarkę, jak nawigować w Internecie
znajdź go (serwer)’szukam.

Pamiętasz długość i szerokość geograficzną z zajęć z geografii? Określają one konkretnie punkt geograficzny na Ziemi i są kompatybilne z poszczególnymi krajami, co oznacza, że ​​każdy z dowolnego miejsca będzie wiedział, jak znaleźć lokalizację, jeśli poda się im szerokość i długość geograficzną; jednak mamy również przyjazny dla człowieka opis najpopularniejszych współrzędnych.

Na przykład nazwa miasta, w którym studiowałem, to Rijeka. Niewiele osób będzie wiedziało, gdzie je znaleźć na mapie, ale jeśli podam im współrzędne (45,3167 ° N, 14,4167 ° E), 2 mogą łatwo je zlokalizować. Serwer DNS to tłumacz, przewodnik. Ten serwer wie, które adresy IP pasują do nazwy domeny, i informuje przeglądarkę, gdzie dalej.

Po przekierowaniu na określony adres IP przeglądarka puka do drzwi serwera hostingowego. Ten konkretny serwer został wspomniany w poprzedniej sekcji i nazywamy go tylko jako “serwer.” Przeglądarka niesie ze sobą informacje, o które prosił użytkownik, i prosi serwer o odpowiedź na pytanie “google.com?”

Serwer odpowiada: “Tak, pod google.com plik mówi …” i daje odpowiedź. Przeglądarka powraca do użytkownika (króla) i przekazuje informacje. Ta część jest co’Dla nas, deweloperów, ważne jest, aby powiedzieć serwerowi, jaką odpowiedź udzielić na konkretne pytanie. Zapamiętaj tę część.

Front-end i back-end

To’Czas zdefiniować jeszcze dwa terminy, które musieliście słyszeć przynajmniej raz. Rozwój frontonu (zwany także programowaniem po stronie klienta) skupia się na pracy z oprogramowaniem klienckim rozwój zaplecza (zwane także programowaniem po stronie serwera) dotyczy oprogramowania serwera.

Gdy serwer zwraca tekst do przeglądarki (na rysunku 1.2, jest to tekst, który’jest powtarzane królowi w przedostatniej klatce), a przeglądarka przedstawia go, jak wygląda ten tekst i jak możesz z nim współdziałać w interfejsie (lub po stronie klienta)
programowanie. Po otwarciu strony internetowej, gdy link jest pogrubiony i ma inny kolor niż reszta tekstu, zmianę wyglądu uzyskano dzięki programowaniu po stronie klienta (HTML plus CSS). Kiedy możesz przeciągać element na ekranie lub inicjować animacje lub dźwięki, to on’s osiągnięto również dzięki programowaniu po stronie klienta (w szczególności HTML i CSS wraz z JavaScript).

Programowanie po stronie serwera lub programowanie back-end to czynność polegająca na skonfigurowaniu komputera i programu serwera (patrz sekcja o nazwie “Co to jest serwer??” wyjaśnienie tej dualności), aby zapytać przeglądarkę o odpowiednie dane. Zazwyczaj oznacza to programowanie w języku po stronie serwera, takim jak PHP. PHP wykona obliczenia lub pobierze dane z bazy danych, zamieni je w
tekst, który można przekazać przeglądarce, a przeglądarka weźmie ją i wyświetli użytkownikowi.

Mimo że cała zawartość zwracana do przeglądarki w celu dostarczenia do użytkownika jest faktycznie przechowywana na serwerze, nazywamy CSS i JavaScript “Strona klienta” ponieważ ich obliczenia odbywają się w przeglądarce. Na przykład, jeśli powiedziałbym JavaScriptowi, aby animował kwadrat zamieniający się w okrąg, matematyka za obliczeniami będzie się działo w przeglądarce. Serwer dostarczy tylko formułę i poinformuje przeglądarkę: “Kiedy oddasz to swojemu królowi, powiedz to w ten sposób …” Z drugiej strony programowanie po stronie serwera oznacza, że ​​cała logika, obliczenia, formuły itp. Zachodzą na serwerze, po prostu zwracając wynik końcowy. Na przykład, jeśli mam witrynę internetową zliczającą liczbę zdjęć przesłanych przez użytkownika (np. Facebook zliczającą liczbę zdjęć w Twoim albumie), obliczenia zostaną wykonane na serwerze, a tylko ostateczna liczba zostanie podana przeglądarka, gdy prosi o te informacje.

Reasumując: front-end to pisanie kodu wykonywanego w przeglądarce (HTML, CSS, JavaScript), a back-end to pisanie kodu wykonywanego na serwerze przed przekazaniem końcowego wyniku do przeglądarki. PHP, JavaScript po stronie serwera, Dart, Ruby, Python i inne języki programowania po stronie serwera są odpowiednie.

Czas jeszcze głębiej wejść do króliczej nory.

Języki po stronie serwera

Ta książka koncentruje się na przygotowaniu środowiska programistycznego do programowania po stronie serwera. Wygraliśmy’t zajmować się HTML, CSS lub JavaScript; dostępnych jest wiele książek na ten temat, a sam proces tworzenia aplikacji po stronie klienta jest dość złożony. Zamiast tego my’Zajmę się wyłącznie przygotowaniami po stronie serwera’bardzo łatwo zacząć od niewłaściwego sposobu. Tak jak plamka na balonie urasta do dużej plamy, gdy wypełnia się powietrzem, tak samo błędne kroki na początku kariery programistycznej mogą przerodzić się w długotrwały szkodliwy nawyk.

Jak zapewne wiesz, przykłady języków po stronie serwera obejmują PHP, Ruby i Python. Siedzą jako programy na komputerze serwera, a także jako program serwera. Te języki pobierają określone polecenia z programu serwera i wysyłają do niego wynik tych poleceń. To dane wyjściowe są przekazywane przeglądarce, gdy użytkownik prosi o odpowiedź na określone pytanie. W skrócie, mówiąc
serwer “Gdy pojawi się żądanie dotyczące witryny example.com, uruchom ten plik za pośrednictwem PHP”:

Języki po stronie serwera

… daliśmy mu sposób na uzyskanie odpowiedzi dla klienta. Następnie uruchamiany jest plik PHP i zawartość “Witaj świecie” jest generowany i wysyłany z powrotem do programu serwera, który jest następnie przekazywany do przeglądarki. Przeglądarka zabiera go z powrotem do użytkownika i po prostu powtarza “Witaj świecie.” Przeglądarka przestaje przekazywać resztę zawartości pliku; znacznik php <?php i słowo kluczowe echo są pomijane w danych wyjściowych. To dlatego, że tag <?php nakazuje serwerowi “Uruchom ten plik przez PHP” a następnie, gdy plik jest uruchamiany przez PHP, echo mówi o tym “Wypisz następującą frazę na ekranie.”

Jeśli ty’masz problem z uchwyceniem tego, patrz rysunek 1.3, który rozwinął się na rysunek 1.1.

Języki po stronie serweraRycina 1.3. Serwer prosi PHP o odpowiedź, jeśli tak’nie można go znaleźć

Na rysunku 1.3:

■ digram przedstawia wnętrze komputera fizycznego na rysunku 1.1
■ Nginx to program serwera WWW zainstalowany na tym komputerze
■ Nginx otrzymuje informacje od klienta w formie pytania (blog z 14 lutego)
■ Nginx sprawdza, czy tam jest’strona blogu / feb / 14
■ ponieważ ich nie ma, Nginx sprawdza trasy do plików PHP
■ Nginx stwierdza, że ​​musi uruchomić skrypt blog.php przez PHP
■ skrypt blog.php łączy się z bazą danych i odsyła tekst dla podanej daty
■ silnik PHP wysyła ten wynik do serwera
■ Nginx wysyła go z powrotem do klienta

Reasumując: PHP jest generatorem odpowiedzi dla serwera, więc wie, jakie odpowiedzi udzielić przeglądarce’pytania. W ten sposób serwer nie działa’Trzeba znać odpowiedzi, po prostu wie, że PHP je pyta, a następnie przesyła odpowiedź do przeglądarki. Wyobraź sobie “Witaj YourName” strona; to’generowanie stron dla każdej istniejącej nazwy jest niemożliwe, ale możemy poprosić PHP o podanie nazwy na jednej stronie, a następnie
wygeneruj odpowiedź, aby dać serwerowi na innej stronie.

Co’ważne jest, aby zrozumieć tutaj przepływ komunikacji między klientem a serwerem oraz język serwera i serwera. Cała komunikacja mieści się w piątej i szóstej ramce komiksu na rycinie 1.2. W rzeczywistości część, w której program serwera komunikuje się z programem PHP, miałaby miejsce całkowicie w szóstej ramce.

Generowanie odpowiedzi za pomocą języków po stronie serwera

Ostatnim i najgłębszym poziomem naszej króliczej dziury jest rzeczywista rozmowa między programem serwera a językiem po stronie serwera ― w naszym przypadku (i wszystkich przyszłych przypadkach), PHP. Omówiliśmy to w pewnym stopniu w poprzedniej sekcji, ale pozwólmy’Spójrzmy teraz na inny przykład z sytuacją, gdy nie można znaleźć odpowiedzi.

Pozwolić’powiedzmy, że klient pyta serwer o: “Czy możesz zdobyć dla mnie wszystko, co złożyłeś przyklad.com/user/id/54?” Oto co stanie się potem:

  1. Serwer sprawdza, czy tam jest’coś już przygotowane pod trasą: / user / id / 54. Jeśli nie ma tam żadnych plików, to’s skonfigurowany, by pytać PHP.
  2. Serwer pyta PHP: “Hej, możesz znaleźć coś poniżej / user / id / 54?”
  3. PHP aktywuje się i przegląda swoje trasy. Oto trasa / user / id / 54 mówi “aktywuj plik user.php z identyfikatorem parametru o wartości 54.”
  4. PHP wykonuje plik (rzeczywista logika pliku jest poza punktem i poza zakresem tego rozdziału) i otrzymuje wynik. Być może wynikiem jest adres e-mail 54. użytkownika w bazie danych. Ten adres e-mail jest następnie zwracany do serwera: “Jasne, znalazłem coś pod tą trasą. Odpowiedź brzmi: [email protected]”.
  5. Serwer odpowiada za pomocą “Dzięki!” i przekazuje tę wiadomość klientowi, który następnie przedstawia ją użytkownikowi końcowemu – tobie.

Ale co jeśli tam będzie’czy nic nie zgłoszono na tej trasie? Na przykład literówka występuje na żądanie klienta przyklad.com/urer/id/54 (zamiast “użytkownik”). Tutaj’co się dzieje:

  1. Serwer sprawdza, czy tam jest’wszystko już przygotowane w ramach trasy: / urer / id / 54. Jeśli nie znaleziono żadnych plików, to’S skonfigurowano tak, aby pytał PHP.
  2. Serwer pyta PHP: “Czy możesz znaleźć coś poniżej / urer / id / 54?”
  3. PHP aktywuje się i przegląda swoje trasy, ale niczego nie odkrywa. Zwraca a “404 Nie znaleziono strony” błąd serwera (jak na rys. 1.1, wynik w lewym dolnym rogu). Jak zapewne wiesz, 404 jest kodem powszechnym w technologiach internetowych i oznacza, że ​​nie możesz znaleźć tego, czego szukasz. Istnieje wiele takich kodów stanu, ale nie musisz znać ich wszystkich na tym etapie swojej kariery.
  4. Serwer odbiera komunikat 404 i myśli “Hmm, PHP miało szczęście. Cóż, nie ma nic, nie mam nic, lepiej zwróć stronę do klienta, która mówi, że nam się nie udało.” Przeglądarka otrzymuje wówczas stronę 404, która zwykle jest tylko ostrzeżeniem tekstowym, takim jak “Ups, próbowałeś złego linku!” ale może być tak skomplikowane, jak chcesz.

Ufam, że ten rozdział był jasny dzięki przedstawionym koncepcjom i pomógł ci je zdobyć
Twoje położenie w kwestii tego, gdzie jesteś (lub będziesz) w wielkim schemacie PHP
programowanie. W poniższej sekcji ty’Znajdziesz więcej informacji technicznych
na żądanie sieciowe i serwery DNS.

Dla tych, którzy chcą więcej

Serwery DNS

Jak wspomniano wcześniej, każda domena (na przykład example.com) w Internecie jest powiązana z określonym adresem IP (na przykład 93.184.216.34). Adres IP to zestaw liczb identyfikujących dany serwer. Innymi słowy, adresy IP informują przeglądarkę, jak poruszać się po Internecie, aby znaleźć komputer (serwer), którego szuka. Serwer DNS (znany również jako serwer nazw) wie, które adresy IP pasują do nazwy domeny, i informuje przeglądarkę, gdzie dalej.

Próbując dowiedzieć się, który adres IP pasuje do nazwy domeny, przeglądarka najpierw sprawdza swoją Pamięć podręcznaSaved zapisana lista poprzednio odwiedzanych domen. Każda przeglądarka utrzymuje tę listę i okresowo ją odświeża. Jeśli znajdzie kombinację domeny-IP we własnej pamięci podręcznej, witryna ładuje się szybciej, ponieważ tam’Nie trzeba pytać o to serwera DNS. Jeśli domena nie jest’W pamięci podręcznej przeglądarka pyta program o nazwie resolver (który jest wbudowany w system operacyjny), aby sprawdzić plik hosts na komputerze’s zainstalowany na. Plik hosts to miejsce, w którym użytkownik może faktycznie zdefiniować, która witryna ma być przypisana do którego adresu IP. (My’Nauczę się korzystać z tego pliku w późniejszych rozdziałach.) Jeśli niezbędne informacje nie są’tam sprawdzana jest pamięć podręczna DNS na routerze (routery też zwykle ją mają), a jeśli tak’też tam nie znaleziono, firma ISP’Serwer DNS jest zapytany.

Aż do tego ostatniego kroku wszystko działo się na twoim komputerze lub, jak mówimy, lokalnie. Teraz to’czas odwiedzić ISP, to’nie jest już sprawą lokalną’s pilot. Jeśli ISP’Serwer DNS nie ma rekordu dla domeny, dowiaduje się i informuje przeglądarkę, a następnie buforuje wyniki dla przyszłych zapytań. Jak się to dowiaduje? Rozcina nazwę domeny od prawej do lewej.

www.example.com jest podzielony na fragmenty. Część .com, zwana TLD lub domena najwyższego poziomu, jest pierwszy. Na świecie istnieje wiele serwerów DNS, często skonfigurowanych w taki sposób, że wiele komputerów działa jak jeden. Dzieje się tak, że jeśli ktoś umrze, inni zapewnią nieprzerwane działanie usługi. Najwyższy poziom tych serwerów to serwery root, które wiedzą, gdzie dalej szukać szczegółów na temat domeny na dowolnym TLD. Serwer root z odpowiednimi rekordami dla .com będzie wiedział, że jest to com com, więc wyśle ​​ci zapytanie dalej w XYZ ― XYZ jest innym serwerem nazw, który będzie znać przykładową część. Ponadto część www (znana również jako subdomena) wejdzie do gry i zostanie również zarejestrowany na określonym serwerze nazw w tym mylącym łańcuchu nazw i serwerów. Gdy wszystkie fragmenty (znane również jako etykiety: .com, przykład i www) zostaną przekształcone w adres IP, wynik zostanie odesłany.

Jeśli ty’Chciałbym dowiedzieć się więcej o głównych serwerach nazw i dowiedzieć się, jak działa cały Internet’sprawne funkcjonowanie zależy od trzynastu głównych komputerów (cóż, klastrów komputerów), spójrz na stronę głównego serwera nazw w Wikipedii lub sprawdź kilka niezwykle wyczerpujących odpowiedzi na Super User.

Co się dzieje podczas pisania? …

Często zadawane pytanie dotyczące rozmowy o pracę programisty to “Co się dzieje po wpisaniu google.com w przeglądarce’s i naciśnij enter?” Podczas gdy częściowo wyjaśniliśmy to wcześniej (choć w uproszczony sposób), sprawdź Alex Gaynor’doskonały opis, jeśli ty’Chciałbym poznać dokładne szczegóły, od sprzętu po oprogramowanie końcowe. To’to niezwykle wszechstronny, ale bardzo dobrze napisany post. Pamiętaj, że realistycznie ten poziom szczegółowej wiedzy nie jest konieczny, aby być dobrym programistą.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me