System kastowy w branży IT

Ten wpis jest kopią archiwalną z moich postów i komentarzy na pewnym wyjątkowym forum dla społeczności IT, na którym publikuję żarty, urządzam prowokacje, dzielę się refleksjami. Generalnie dokuczam kolegom i koleżankom z branży, inspiruję dyskusje i kłótnie.

#1

(…) słyszałem też, że niektórzy wierzą w swoisty system kastowy, to chyba tak szło (od najwyższej kasty do najniższej):

  1. Programiści
  2. Sieciowcy
  3. Bazodanowcy
  4. Admini nie będący sieciowcami
  5. Testerzy
  6. Helpdesk
  7. Analitycy biznesowi
  8. PMs

Mogłem coś pomylić, ale jakoś tak to było.

Plus: za bycie kobietą idzie się oczko w górę. Kobieta programista nie może już pójść wyżej, pozostaje równorzędna mężczyźnie programiście. Płeć nie ma znaczenia wśród devów.

#2

HR to nie IT niezależnie od płci.

Komentarz na forum: to czemu w pewnym stopniu decydują o tym czy ktoś wejdzie do IT czy nie, to jest dramat

Twoi rodzice mogli być np. hydraulikiem i pielęgniarką, ale zadecydowali o Twoich narodzinach chociaż stałeś się informatykiem. Do tego czasu pewnie już się z tym pogodzili a i Ty ich do IT nie wliczasz.

#3

Jeżeli ktoś pełni kilka różnych ról z hierarchii to przeprowadza się binarną operację OR na numerach pozycji i powstaje numer ostateczny. Prowadzi to do interesujących zjawisk: sieciowec-admin zajmujący się także helpdeskiem będzie traktowany wyżej niż sieciowiec-admin zajmujący się programowaniem. Ponadto, w wyniku takiego przeliczania objawiają się dwa progi poniżej których nie można spaść ot tak po prostu: próg bazodanowca i próg analityka binzesowego. Innymi słowy, aby spaść najniżej na poziom PM trzeba po prostu być PM.

Osoby posiadające więcej niż jedną określoną funkcję mogą być nazywane „informatykami” o ile w tych funkcjach nie występuje PM.

Osoba posiadająca więcej niż 4 różne pozycje może być nazywana „informatykiem zakładowym” o ile w tych funkcjach nie występuje PM.

Nieracjonalni i zabobonni informatycy

Ten wpis jest kopią archiwalną z moich postów i komentarzy na pewnym wyjątkowym forum dla społeczności IT, na którym publikuję żarty, urządzam prowokacje, dzielę się refleksjami. Generalnie dokuczam kolegom i koleżankom z branży, inspiruję dyskusje i kłótnie.

#1

Wiele razy o tym wspominałem, ale chyba nikt tego nie brał na poważne: informatycy są BARDZO zabobonnymi ludźmi którzy dodatkowo mają skłonności do mocnego konformizmu. Jakby tego było mało, świat tworzenia oprogramowania takiego konformizmu oczekuje i go wspiera i buduje się na mitach, zabobonach, dziwacznych poglądach. Wręcz podstawowa różnica między seniorem a juniorem jest taka, że ten pierwszy posiadł zdolność odnalezienia się w każdym dziwnym zestawie mitów i na bagnistym podłożu irracjonalności jest w stanie skutecznie budować software. Istotny jest konformizm, bo ten zapewnia sukces teamu. Jeżeli team ma wspólne bożki technologiczne, rytuały, konwencje, to odniesie sukces choćby nawet miał pisać w BASICu używając polecenia COME FROM. No i gdy dodamy do tego wysokie zarobki to informatycy zaczynają wierzyć, że oni posiedli jakąś zdolność „wygrywania życia” i że można rozciągać to ich wadliwe postrzeganie na wszystko, na całe życie i całą ludzkość. Otoczenie często to widzi zupełnie jasno, że to jakiś rodzaj zwichrowania osobowości, którego jednak lepiej nie leczyć bo przynosi złote jaja do domu.

To komiczne, gdy spotyka się takiego buńczucznego informatyka, że co to nie on i w ogóle indywidualista i wszystko zna i wie, a tu nagle zaczyna gadać głupoty że tylko taki standard, taka konwencja, uznane praktyki, jedynie słuszne rozumienie xD a potem w tym samym duchu zacznie mówić o polityce, życiu, sporcie, diecie xD najgorsi są chyba fizycy-informatycy, moje zdanie na ich temat niektórzy mogli poznać z komentarzy z ostatniego tygodnia.

#2

Intro: (…) wszyscy się boją napisać cokolwiek nietypowego bo że niby ktoś się na nich się krzywo spojrzy. Ale jak trzeba się kłócić o zabobony typu SOLID, DRY, KISS, jakieś konwencje i pseudo-standardy to do gardła by się rzucili.

Intro 2: (…) branża IT to jest takiego, co każdemu może namieszać w głowie. Spójrz na programistów – niektórzy zaczynają wierzyć w zupełnie irracjonalne zabobony tylu SOLID, DRY, KISS i inne. Albo przedkładają jakieś języczki programowania typu Pajton, Rdzewiej czy Idź ponad inne. No jak dzieci po prostu. No więc IT ma w sobie cos takiego, co ludziom w głowach po prostu miesza i zatracają rzeczywistość. Nie trzeba się wówczas złościć tylko delikatnie, empatycznie takie osób wysłuchać, rozmawiać z nimi, pomóc im odnaleźć prawdziwe przyczyny ich odczuć, wierzeń, skłonności. Nie należy odrzucać albo traktować złością, albo traktować suchą racjonalnością. Rozmowy warto zacząć od wyrażenia tego jak bardzo doceniamy wrażliwość drugiej osoby, jej zapał, jej zaangażowanie, przejęcie.

Intro 3: (…) niektórzy ludzie zamiast akceptować lub odrzucać jakieś zjawiska w sposób irracjonalny – jak Ty to robisz – wolą wykonywać eksperymenty, pomiary itp. Nie każdy opiera się na zdaniu innych czy kieruje konformizmem. Naturalnie, takie cechy nie są pożądane w IT, więc nie jestem zaskoczony, że ich nie posiadasz. IT to siedlisko wielu zabobonów: SOLID, DRY, KISS, separation of concerns i wiele, wiele innych, które nigdy nie przeszły rygorystycznych eksperymentów. Liczy się jednakże nie to, co jest prawdą, ale to, co jest spójne z działaniem danego programistycznego teamu. Zgrany team zrealizuje projekty informatycznie sprawnie choćby nie wiem jak dziwaczne przyjął konwencje i kultywował poglądy.

Otóż te moje odwołania do SOLID, KISS, DRY oraz innych praktyk w wielu moich komentarzach dotyczą tego, że pewne standardy, dobre praktyki i konwencje egzystują w informatyce od lat a czasami dekad, lecz nie wynikają one z niczego innego niż wiary. Nigdy nie udowodniono ich skuteczności w sensie rygorystyczno-naukowym. Dopiero ostatnie lata sprawiły, że zaczęto robić rygorystyczne eksperymenty, prowadzić pomiary i inne takie, aby zrobić z software developmentu dyscyplinę naukową opartą o dowody, evidence-based. I okazało się, że nic nie trzyma się kupy. Wedle mojej wiedzy nie udało się konkluzywnie potwierdzić skuteczności ŻADNEGO z informatycznych przekonań. Gdy piszę „konkluzywnie” to mam na myśli, że kolejne badania przynosiły sprzeczne rezultaty. Czasami eksperyment wykazał, że jakaś praktyka jest super-skuteczna, aby po chwili ten sam eksperyment przeprowadzony gdzie indziej wykazał, że ona w ogóle nie działa. Zaczęto to analizować, w wielu przypadkach zaproponowano interesujące hipotezy. No ale jeżeli jesteś tego ciekawy to punktem wyjścia jest Google Scholar a najlepiej dostęp do płatnych naukowych baz danych.

Wiem, że to co opisuje, może szokować. Ja sam byłem tym ogromnie zaskoczony, w ogóle się tego nie spodziewałem. W swojej osobistej praktyce programistycznej stosuje rozmaite podejścia, których się wyuczyłem przez lata, które weszły mi w krew i miałem je dobrze zracjonalizowane, wyjaśnione, cały światopogląd ułożony od A do Z. Jestem przy tym dosyć skutecznym programistą, więc mógłbym zapytać: czy byłbym tak skuteczny gdyby nie to, że stosuje te skuteczne podejścia?

Jeżeli badania były do czegoś zgodne, to do tego, że cechą charakterystyczną doświadczonych programistów w odróżnieniu od początkujących jest to, że przez lata nauczyli się był skuteczni niezależnie od swoich przekonań, praktyk, konwencji. Czasami nawet wtedy, gdy cos jest niezgodne z tym jak funkcjonuje mózg – przykładem jest stosowanie konwencji nazewniczej camelCase. Ona aktualnie UTRUDNIA sprawne działanie mózgu, co można bardzo obrazowo i łatwo wykazać w eksperymentach z eye trackingiem, nie trzeba do tego robić żadnych wielkich teorii. Okazuje się jednak, że mózgi seniorów programowania dostosowały się do pracy w takich warunkach i są równie skuteczni jak juniorzy na zgodnej z działaniem mózgu konwencji snake_case.

Takich dziwnych doniesień trochę jest i będzie więcej, bo dopiero teraz się rozwija ten obszar badań i stosowane są coraz lepsze narzędzia pomiarowe.

Albo weźmy DRY. Częstą miarą jakości kodu jest istnienie w nim najmniejszej ilości duplikatów. Kod, który ma ich wiele nazywany jest WET i od dekad zaleca się walkę z nim poprzez stosowanie zasady DRY podając szereg powodów dla których tak jest lepiej. Badania jednakże nie wykazały tego, aby było „lepiej” cokolwiek to „lepiej” miałoby znaczyć. Badano gigantyczne zbiory kodu, wielkie repozytoria, wieloletnie historie commitów i nie wykazano jakoby DRY przynosiło mniej bugów, mniej modyfikacji, podnosiło jakość czegokolwiek. Za to zwiększało liczbę późniejszych działań odwrotnych: duplikowania kodu, aby tworzyć jego specjalizowane warianty. Czyli że DRY tak naprawdę bywa zwodniczą przedwczesną optymalizacją i stratą czasu. Badano też repozytoria osób, które nie stosowały DRY i nie odnaleziono niczego, co by wskazywało, że tam było gorzej lub lepiej niż z DRY. Zaproponowano wiele hipotez czemu tak jest, polecam szukać w literaturze.

Ten motyw powtarza się. Badacze biorą pod lupę praktykę X i okazuje się zazwyczaj, że:

  1. To w ogóle działa ALBO
  2. To działa, ale w 95% tylko wtedy gdy stosuje to senior, którego mózg przez lata na przekór wszystkiemu się sam przeprogramował ALBO
  3. To działa, ale tylko w mikroprojekcikach o niewielkim albo żadnym skomplikowaniu.

Ale bardziej istotne jest co innego. Sukcesy ZESPOŁÓW programistów okazują się w ogóle nie zależeć od przyjętych przez nich praktyk i konwencji a jedynie od zgrania i lojalności wobec tych praktyk. Zwycięstwo nie jest więc w prawdziwości tego w co wierzycie, ale w tym, że wierzycie razem, co czyni Wam skuteczną platformę współdziałania umysłów.

Zmierzam do tego, że deweloperzy często gorliwie wyznają fałszywe bożki i paradoksalnie największe mohery-seniory są skuteczni MIMO trwania w fałszu. Można przejść na życie w prawdzie i rozpoznać, że bożki to tylko fikcja, która może być użyteczna jako pewien fundament komunikacyjny, ale nic ponadto. I coraz więcej osób tak robi.

Prawda o skutecznym software developmencie prawdopodobnie do nas dopiero nadejdzie wraz z rozwojem inżynierii oprogramowania bazowanej na dowodach. Najpewniej z jej zdobyczy najmocniej skorzystają nasze dzieci, które nie będą musiały sobie wykrzywiać mózgu, ale będą programować w zgodzie z jego naturalnym ukształtowaniem. Na tę chwilę jednak społeczność IT generalnie brodzi w ciemnocie, którą ma za oświecenie.

Znaki zodiaku w społeczności IT

W ramach ciekawostki publikuję wyniki ankiety „jaki jest Twój znak zodiaku”, którą jakiś czas temu przeprowadziłem w grupie zrzeszającej ludzi z branży IT. Oddano 1275 głosów. Wynik jest moim zdaniem intersujący, może ktoś zaproponuje wyjaśnienie czemu pewne znaki wyraźnie częściej występują.

Testy na inteligencję nie są dla każdego

Ten wpis jest kopią archiwalną z moich postów i komentarzy na pewnym wyjątkowym forum dla społeczności IT, na którym publikuję żarty, urządzam prowokacje, dzielę się refleksjami. Generalnie dokuczam kolegom i koleżankom z branży, inspiruję dyskusje i kłótnie.

(…) byliście kiedyś poddawani testom na inteligencje lub czemuś podobnemu?

Gdy chodziłem jeszcze do szkoły średniej zawezwano mnie i grupę innych chyba losowo wybranych osób na jakieś testy psychologiczne do lokalnej poradni psychologiczno-pedagogicznej, wrzucono do jednego pomieszczenia, rozdano każdemu serię arkuszy z zadaniami i nakazano wypełniać. Większość zadań była podobnych do testów IQ z Mensy (jakby ktoś nie wiedział jest to „największe i najstarsze stowarzyszenie ludzi o wysokim ilorazie inteligencji”), ale dodatkowo były też jakieś testy z wyobraźni przestrzennej i jakieś inne pomniejsze. Wyglądało to tak jakby ktoś chciał badać nasze techniczne umiejętności. Chodziłem do technikum elektronicznego, więc wydawało się to mieć sens.

No i teraz zerknijcie na pic related, takich zadań na teście było pełno. W skrócie chodzi o to, że podane są jakieś jedno lub dwuwymiarowe sekwencje albo układy czegoś i trzeba podać co powinno być brakującym elementem. Czyli przykładowo sekwencja „1, 2, 3” i co powinno być kolejne – przykładowo odpowiedzą może być 4. Miałem z tymi zadaniami pewien specyficzny problem. Mianowicie z mojej lekko autystycznej perspektywy każda odpowiedź była dobra, bo nie było dla mnie problemem dokonanie interpolacji funkcji matematycznej, która by łączyła dowolne trzy liczby z dowolną czwartą. Gdyby mnie się ktoś zapytał dlaczego do sekwencji „1,2,3” jako następną liczbę wyznaczyłem 23 to potrafiłbym sprawnie wyliczyć tej osobie odpowiednią funkcję matematyczną, która by je łączyła.

Rozumiałem, że nie tego się ode mnie oczekuje, lecz raczej podania schematycznej odpowiedzi takiej jakiej by się oczekiwało od kogoś, kto nie rozumie za dużo. Wypełniałem więc kolejne sekwencje liczbowe i później obrazkowe aż wraz z upływem czasu ogarnęła mnie tak potworna nuda, że zacząłem jednak wybierać mniej oczywiste odpowiedzi. Zanim doszedłem do końca długaśnego arkusza byłem już z nudów kompletnie zbuntowany i odpowiedzi były naprawdę dowolne (ale nie błędne w moim rozumieniu i w zasięgu moich umiejętności). Niestety, na końcu czekało mnie coś niespodziewanego.

Komiks.

Trzeba było uporządkować sekwencję zdarzeń przedstawioną w krótkim komiksie tak, aby miało to sens przyczynowo-skutkowy. Historie dotyczyły ludzi, ich interakcji, życia, codziennych spraw. Byłem już na tyle oddany wymyślaniu nietypowych (ale poprawnych) odpowiedzi w mojej głowie, że połączyłem obrazki komiksu w zupełnie szalone i fantazyjne fabuły. Zadowolony wpisałem to wszystko w arkusz.

Później się dowiedziałem skądś (bo nie otrzymałem do ręki żadnych oficjalnych wyników czy interpretacji), że wszystko, co wypełniałem, było świetnie do momentu komiksu, który był zdaniem oceniających tak źle, że absolutnie jedyne do czego się mogłem nadawać z takim zwichrowanym aspołecznym umysłem to informatyka. Nikt nie stwierdził mi wówczas żadnego autyzmu czegoś takiego chyba tylko dlatego, że tam nikt się nie znał na takich sprawach.

Dodatkowo były to czasy, w których ludzie śmiali się z tych, którzy nie poszli do liceum. Technika i zawodówki były widziane jako coś gorszego, szkoły dla podludzi. Dopiero kilka lat później się okazało, że nadchodząca polska rzeczywistość zadziała odwrotnie: osoby techniczne staną się królami rynku pracy a licealiści pójdą na nieprzydatne nikomu studia po których nie będzie pracy.

Na tych testach wszyscy ode mnie ściągali wszystko za wyjątkiem komiksu, bo to uznali, że umieją i pewnie tak było. Stąd podobno wszyscy wyszli na mądrzejszych ode mnie, miałem chyba najgorszy ostateczny wynik z grupy xD xD xD

Tak więc „smutna żaba, nie ma profitu” – tak to wtedy wyglądało.

Kulistość Ziemi a życie w symulacji

Judyta zrobiła ankietę o kulistości Ziemi i przypomniała mi się hipoteza, która nie jest oryginalnie moja, ale wyczytałem ją książce o tzw. symulacji przodków i mnie zainspirowała jako takie ćwiczenie intelektualne.

Otóż jesteśmy w grze komputerowej i tak jak w każdej współczesnej grze Ziemia jest taka jaka jest potrzebna aktualnego widoku gracza. Przykładowo: niech to będzie gra taka, że kierujesz światową grupą antyterrorystyczną, która ze swojej bazy wojskowej w USA lata superszybkim samolotem do różnych państw świata aby zwalczać akty terroru. Gdy planujesz do którego miejsca planety wysłać swoich agentów, Ziemia jawi się jako kula a na niej widzisz różne znaczniki, miasta itp. Dosłownie markery na globie, Google Earth. Gdy już wyślesz żołnierzy na miejsce, wówczas akcja przenosi się do „płaskiej” Ziemi, bo nie ma potrzeby symulowania kulistości (i marnowania zasobów symulatora). Może będzie to widok z góry (jak w grach typu RTS) albo widok z perspektywy pierwszej osoby (gry typu FPS). Toczysz w tym widoku np. akcję odbicia zakładników. Zaś w pewnych momentach Ziemia nie będzie ani płaska, ani kulista – np. gdy będzie mieć miejsce moment fabularny, w którym wizytujesz Biały Dom, bo wezwał Cię prezydent. Wszystko dzieje się wówczas w czterech ścianach Gabinetu Owalnego. Nie ma potrzeby symulować Ziemi dalej niż to, co widać zza okna.

Wszystko to wyżej opisane brzmi szalenie, ale niektóre badania zjawisk kosmicznych przynoszą dziwne wyniki, które łatwiej wyjaśnić powyższym podejściem niż innym. Np. obserwując pochodzenie niektórych cząstek kosmicznych naukowcy zauważyli, że te pojawiają się jakby znikąd, przelatują przez widoczny dla nas świat, i znikają jakby uderzyły w niewidzialną ścianę. Wydaje się to być analogiczne do symulacji ptaków w grach komputerowych. Silnik gry sprawia, że pojawiają się one najpierw losowo w dalekiej oddali, w powietrzu. Przelatują nad głowami graczami i po oddaleniu się na odpowiednią odległość znikają w przypadkowym momencie. Takich przykładów zjawisk sugerujących, że rzeczywistość objawia optymalizacje oraz tzw. „glicze” (zakłócenia), jest sporo, ludzie to starają się opisać i katalogować. Ja zapamiętałem ten przykład z ptakami i cząstkami.

Jeżeli uwierzymy, że nasze doświadczenie egzystencji na Ziemi jest tylko symulowaną egzystencją, to okaże się, że poglądy okrągłoziemców i płaskoziemców nie są niezgodne a ich współistnienie jest pośrednim dowodem symulacji. Po prostu ci pierwsi w tej grze częściej mają do czynienia z widokami wymagającymi okrągłej ziemi i symulator dostarcza im takiego świata. Ci drudzy mają odwrotnie, grają częściej w widokach płaskich, więc dla nich symulator nie traci zasobów na symulację kulistości i robi takie optymalizacje, że np. mogą oni dostrzegać odległe miejsca, które powinny być niewidzialne za krzywizną ziemi.

Interesujące jest to, że jeżeli założymy, iż symulator oszczędza zasoby dlatego, bo one nie są nieskończone, wówczas też można się zastanowić czy symulacja nie jest tak skonstruowana, aby uniemożliwić doświadczania kulistości dla zbyt dużej liczby osób. Gdyby tak było, wówczas:1) przyrost liczby ludności na świecie (zakładając, że to przyrost prawdziwych „graczy” a nie symulowanych sztucznych postaci, tzw. NPC) musiałby powodować wzrost występowania zjawisk „płaskości” czemu towarzyszyłby wzrost populacji płaskoziemców;2) można spróbować złośliwie „zawiesić symulację” prowadząc maksymalnie dużą ilość ludzi w kierunku sytuacji, w których kulistość powinna być symulowana maksymalnie dokładnie.

No i teraz:

Ad 1) Podobno wzrost populacji płaskoziemców ma miejsce. Może dlatego, że Internet umożliwił im łatwiejszą propagację poglądów, a może jest to wynik tego, że żyjemy w symulacji. Symulator może po cichu wspierać propagację takich poglądów w warunkach zagrożenia obciążeniem.

Ad 2) Może uszkodzenia rakiet i innych pojazdów kosmicznych, które opóźniają działania w kosmosie i podbój planet, nie są przypadkowe? Postęp technologiczny jest korzystny dla symulacji, gdy zamyka ludzi w pomieszczeniach (wtedy symulacja Ziemi ma najmniejsze wymagania) a niekorzystny, gdy ludzie zaczynają działać w powietrzu i kosmosie.

Bardzo ciekawe intelektualne rozważania można z tego wyprowadzić. I przede wszystkim można w tym znaleźć jakąś nową perspektywę spojrzenia na osoby o „szalonych” poglądach. Czy to szalonych w jedną czy drugą stronę.

Gdy wtyczki się aktualizują ale WordPress już nie

Zagadkowy taki przypadek mi się trafił ostatnio: serwis oparty o WP z jednej strony pozwalał bez przeszkód aktualizować wtyczki, ale niemożliwe było zaktualizowanie samego WordPressa. Nieustannie pojawiał się monit o podanie danych do FTP, aby móc wgrać pliki. Rozwiązałem tę sprawę, przyczyną było niewłaściwe działanie mechanizmu zabezpieczającego nazywającego się SELinux. Poniżej opisuję jak do tego doszedłem, aby innym dopomóc diagnozować podobne problemy.

Po pierwsze, jeżeli pojawia się monit o dostęp FTP, to znaczy to, że WP ma problem z zapisem i próbuje zaproponować jedną z kilku możliwości jego dokonania. Dopóki ta nie jest określona, to nic mądrzejszego się nie dowiemy. Stąd warto w wp-config.php dopisać taką linijkę:

define('FS_METHOD', 'direct' );

Co to daje? Narzuca metodę zapisu: bezpośrednio do plików. Teraz w widoku „Stan witryny” (w menu Narzędzia) pojawi się w podpowiedziach problemów lista plików, do których dostępu brakuje. Te pliki trzeba będzie sprawdzić. Należy się upewnić, że:

  • Należą do właściwego użytkownika systemowego lub właściwej grupy – te zapewne będzie można wyczytać z konfiguracji serwera WWW (np. /etc/httpd/conf/httpd.conf) lub konfiguracji PHP-FPM (np. /etc/php-fpm.d/www.conf);
  • Mają nadane odpowiednie uprawnienia do zapisu;
  • Sprawdzić kontekst SELinux (ls –context) czy nie jest ustawiony na tylko-do-odczytu.

W moim przypadku problemem było to ostatnie. Aby to naprawić, musiałem użyć polecenia chcon no narzucenia nowego kontekstu, bo odzyskanie za pomocą restorecon nic nie pomagało.

Odnajdywanie osób z KRS w mediach społecznościowych

Czasami istnieje potrzeba zlokalizowania jakiejś osoby, która widnieje tylko w KRS. Dzisiaj każdy ma Facebooka, ale poszukiwania „Jana Kowalskiego” zwrócą nam dziesiątki takich Janów. Jak rozpoznać właściwego? Nieoczywistym dla każdego jest powiązanie informacji obecnej w KRS, czyli daty urodzenia danej osoby, która jest zapisana w numerze PESEL. Datę urodzenia w social mediach potwierdzimy odnajdując życzliwe komentarze urodzinowe w danym dniu wpisane przez znajomych. Czasami też ktoś wprost poda swoją datę urodzenia.

Programowanie a oderwanie od podstaw

Niedawno czytałem wątek na Facebooku, w którym ktoś zapytał specjalistów od informatyki czy byliby w stanie sami zbudować od podstaw te różne urządzenia, z którymi pracują. Odpowiedzi były różne. Poczyniliśmy tak duży postęp techniczny, że niektórym się wydaje, że owszem, zrobią hurtownię danych, ale już pojedynczy tranzystor to kosmiczna technologia. Innymi słowy, specjalizacja, abstrakcja i miniaturyzacja oderwały niektórych profesjonalistów od źródeł ich zawodów. I nie ma w tym nic dziwnego, taki jest porządek rzeczy.

W programowaniu też widać zjawisko pewnego oderwania od podstaw, ale ma ono związek z dopasowaniem narzędzi pracy do umysłu pracującego. Weźmy na przykład kolorowanie składni. Jest tak powszechne i tak pomocne, że jej wyłączenie wprawić niektórych może w zakłopotanie, może wywołać poczucie zagubienia. Tymczasem dawniej często tak się pisało kod. I w dalszym ciągu w wielu przypadkach kod przychodzi pisać po dawnemu, gdy trzeba coś na szybko zmienić na serwerze z linii poleceń a tam czeka nas niedokonfigurowany edytor vi o niecodziennych skrótach klawiszowych.

Warto chyba przypomnieć, że programowanie nie tylko jest możliwe, ale jest całkiem wydajne w takich warunkach jak zwykły notepad. Czarno-białe litery, brak obsługi tabulatorów, brak podpowiedzi, brak podręcznego drzewa plików. To tylko przyzwyczajenia się zmieniły.

Jest to ważne także i dlatego, że wiele osób bardzo poważnie taktuje dzisiaj temat doboru narzędzi. Preferują pewne określone IDE czy określony program do administracji bazą danych oraz mają wyobrażenie takie, że te programy są niebywale złożone i koniecznie trzeba stosować te szczególnie wybrane.

Tymczasem ani nie ma takiej konieczności, ani te programy nie są szczytem złożoności. Wiele z nich można napisać samemu i w życiu programisty przychodzi taki moment, że zmuszony okolicznościami tworzy on np.:

  • Własne IDE
  • Własne webowe IDE
  • Własnego klienta SQL do administacji bazą
  • Własnego klienta GIT
  • Własnego klienta SSH, SCP, FTP
  • Własnego shella

Ze zdumieniem można wówczas odkryć, że podstawowe funkcjonalności tego oprogramowania da się wykonać w zaskakująco małych ilościach linii kodu. Te zaś przyrastają dopiero wtedy, gdy chce się wygładzić i wyspecjalizować określone obszary.

(W dawniejszych czasach nie było to rzadkością chcieć pisać własny system operacyjny, bo ludzie dzięki powszechności dyskietek i możliwości podglądu kodu BIOS-u mieli wiedzę o bootsectorach, systemach plików, zarządzaniu pamięcią. Dzisiaj to już jest wiedza nieco zapomniana.)

Użycie certyfikatów Let’s Encrypt do wielu serwisów na zwykłym hostingu

Wprowadzenie

Kiedyś pisałem o tym jak można dla serwisów umieszczonych na zwykłych hostingach WWW używać darmowych certyfikatów Let’s Encrypt. Procedura jest jednak żmudna, nudna i trzeba ją powtarzać co kilka miesięcy, co dla kogoś, kto utrzymuje wiele serwisów a nie tylko jeden, jest dosyć nużące. Jeżeli jednak wciąż nie chcemy iść w kierunku zakupu płatnych certyfikatów, to rozwiązaniem jest uruchomienie tzw. reverse proxy na tanim serwerze wirtualnym. Wyjaśnijmy sobie to po kolei.

Najtańsze płatne certyfikaty są obecnie na rynku za około 10 zł. Jeżeli ktoś opiekuje się 10 serwisami internetowymi, które są umiejscowione ma zwykłym hostingu na którym nie można w sposób zautomatyzowany korzystać z darmowych certyfikatów, to musi wydać 100 zł rocznie na certyfikaty. Nie jest to duża kwota a kłopotu jest troszeczkę mniej.

Innym rozwiązaniem jest wykupienie na rok taniego serwera wirtualnego. Ich oferta w Internecie jest spora a mówimy tutaj o wersji naprawdę bardzo ubogiej, bo wymagającej 1 procesora wirtualnego, około 5 GB miejsca dyskowego, od 512 do 1024 MB RAM. Można takie kupić płacąc za rok około 110 zł, czyli wiele więcej niż za certyfikaty – a stajemy się bogatsi o serwer VPS!

Przygotowanie VPSa

W moim przypadku zamówiłem serwer z systemem operacyjnym CentOS 8, aby móc na nim uruchomić skrypt konfiguracyjny, który rozwijam i którego kod jest w repozytorium na GitHub:

curl -s -L http://grzegorzkowalski.pl/install/ | bash

Skrypt będzie wykonywał wiele działań i zada kilka pytań. Odpowiedź „Y” należy udzielić na te:

  • Enable Apache [default port 80 and 443] ? [y/N]
  • Change timezone to Europe/Warsaw? [y/N]
  • Enable FirewallD ? [y/N]

Po tym wszystkim dostaniemy serwer z Apache’m i mnogością różnych użytecznych narzędzi (m.in. PHP 7.4, Python 2/3, NPM, Node.js, Composer, Certbot, wget, GIT). Nas interesuje głównie Apache, którego możemy skonfigurować w tryb reverse proxy.

Tworzymy sobie nowy plik konfiguracyjny do tego celu i jeżeli nasz hosting ma adres 123.123.123.123 to piszemy tak.:

vi /etc/httpd/conf.d/moje_proxy.conf

Wypełniamy go treścią:

<VirtualHost *:80>
ServerName grzegorzkowalski.pl
ServerAlias www.grzegorzkowalski.pl
ServerAlias kolejnyserwis.pl
ServerAlias innyserwis.pl
ServerAlias jeszczeinny.pl
ServerAlias itakdalej.pl
# ...
ServerAlias az_do_ostateniego.pl

DocumentRoot "/var/www/html/proxy"
ServerAdmin grzegorz.adam.kowalski@outlook.com

<Directory "/var/www/html/proxy">
DirectoryIndex index.php
AllowOverride All
Require all granted
</Directory>

ProxyPreserveHost On
ProxyPass / http://123.123.123.123:80/
ProxyPassReverse / http://123.123.123.123:80/
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
RequestHeader set X-Forwarded-SSL expr=%{HTTPS}
</VirtualHost>

W pliku konfiguracyjnym odwołujemy się do folderu, którego jeszcze nie ma, więc warto go stworzyć:

mkdir /var/www/html/proxy

Teraz w panelu konfiguracyjnym hostingu znajdźmy edycję stref DNS i zmieńmy we wszystkich domenach wskazanych w powyższym pliku konfiguracyjnym numer IP przypisany do tzw. rekordu „A” na adres IP naszego serwera VPS.

Gdy to wszystko jest gotowe, zresetujmy Apache na serwerze wirtualnym, aby nowa konfiguracja weszła w życie. W zależności od systemu może to wymagać trochę innego polecenia, na moim CentOS wygląda to tak:

service httpd restart

No i teraz przed nami zagadnienie wygenerowania certyfikatów. W systemie powinien już być zainstalowany i gotowy do użycia skrypt:

certbot-auto

Należy postępować zgodnie z pytaniami, które będą pojawiać się na ekranie a wynikiem będą wygenerowane certyfikaty, lekko rozszerzony plik konfiguracyjny Apache, który wcześniej stworzyliśmy oraz dodatkowo zostanie stworzony drugi plik konfiguracyjny przeznaczony tylko dla ruchu szyfrowanego na porcie 443.

Gdy WordPress odmawia współpracy

Teraz proxy jest już sprawne, certyfikaty również są zrobione. To,co jeszcze może nas spotkać to zaskoczenie, gdy np. nasz serwis oparty o WordPress odmówi posłuszeństwa a przeglądarka internetowa zwróci komunikat „Too many redirects” czyli „zbyt wiele przekierowań”.

Jak się okazuje, twórcy WordPressa zaszyli jedną ważną informację w instrukcji do tego systemu. W pliku wp-config.php należy ręcznie dopisać w dowolnym miejscu dwie linie kodu:

if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';

Debugowanie zbyt wielu przekierowań

Jeżeli problem „Too many redirects” pojawia się pomimo odpowiedniej konfiguracji takiego czy innego systemu, warto zbadać zjawisko pomocniczym skryptem (jest to zmodyfikowana wersja tego skryptu):

#!/bin/bash
echo
for domain in $@; do
  echo --------------------
  echo $domain
  echo --------------------
  curl -sILk $domain | egrep 'HTTP|Loc|X-Redirect-By: ' | sed 's/Loc/ -> Loc/g'
  echo
done

Skrypt używamy np. tak:

skrypt-do-przekierowan.sh grzegorzkowalski.pl

W wyniku skryptu zobaczymy serię nagłówków HTTP wskazujących na typ przekierowania, docelowe miejsce przekierowania oraz kto zlecił przekierowanie. W przypadku np. WordPressa wyświetli się np. „WordPress 7.4.3”. Jest to informacja, że przyczyna problemu leży nie w konfiguracji Apache, nie w jakimś zabłąkanym pliku .htaccess na hostingu, ale np. w pluginie WordPressowym do obsługi HTTPS albo właśnie w braku wpisu w wp-config.php.