Zawsze najnowszy Apache na CentOS 7

Domyślnie CentOS dostarcza starszą, ale uznaną za sprawdzoną, wersję Apache. Niestety, oznacza to, że taka wersja może nie mieć istotnych nowych możliwości jak np. obsługi HTTP 2. Można sobie z tym poradzić korzystając z repozytorium CodeIt, które dostarcza najnowsze wersje Apache, Nginx i powiązanych z nimi pakietów.

Czy adres IP stanowi dane osobowe?

Ten problem wraca co jakiś czas przy okazji internetowych rozmów. Istniał on w czasach poprzedniej Ustawy o ochronie danych osobowych i istnieje dzisiaj w czasach RODO. Skąd w ogóle bierze się to pytanie? W kontekście RODO można je zadać po lekturze definicji danych osobowych oraz Motywu 30:

„dane osobowe” oznaczają informacje o zidentyfikowanej lub możliwej do zidentyfikowania osobie fizycznej („osobie, której dane dotyczą”); możliwa do zidentyfikowania osoba fizyczna to osoba, którą można bezpośrednio lub pośrednio zidentyfikować, w szczególności na podstawie identyfikatora takiego jak imię i nazwisko, numer identyfikacyjny, dane o lokalizacji, identyfikator internetowy lub jeden bądź kilka szczególnych czynników określających fizyczną, fizjologiczną, genetyczną, psychiczną, ekonomiczną, kulturową lub społeczną tożsamość osoby fizycznej;

Art. 4 pkt 1) RODO

Osobom fizycznym mogą zostać przypisane identyfikatory internetowe – takie jak adresy IP, identyfikatory plików cookie – generowane przez ich urządzenia, aplikacje, narzędzia i protokoły, czy też inne identyfikatory, generowane na przykład przez etykiety RFID. Może to skutkować zostawianiem śladów, które w szczególności w połączeniu z unikatowymi identyfikatorami i innymi informacjami uzyskiwanymi przez serwery mogą być wykorzystywane do tworzenia profili i do identyfikowania tych osób.

Motyw 30 RODO

Zanim przedstawię cytaty z wyroku Trybunału Sprawiedliwości UE, które wiele wyjaśniają, przedstawię moją wypowiedź z jednej z internetowych dyskusji w której mniej prawniczym żargonem argumentowałem czemu adres IP w przytłaczającej większości wypadków nie stanowi danych osobowych:

[A]dres IP jest adresem urządzenia a nie użytkownika. Jeżeli jakiś użytkownik “przychodzi z pewnego adresu IP”, to ten adres IP może być adresem każdego z sieciowych urządzeń pośredniczących. W przypadku adresu IP widzianego z perspektywy Internetu niemalże na 100% będzie to adres jakiegoś routera obsługującego setki lub tysiące użytkowników. Dotarcie do konkretnego komputera wymaga nakazów sądowych wobec operatorów internetowych, który odczytują dalsze dane z tego routera podając kolejny adres IP, który być może prowadzi do czyjegoś urządzenia a być może… do kolejnego routera, i do kolejnego routera, i do kolejnego.

Praktycznym przykładem tego, że IP nie stanowi danych osobowych, jest to, że Policja czasami zawzięcie namierza różnego rodzaju złoczyńców (ostatnio modna jest “mowa nienawiści”, groźby przez Internet) aż do konkretnego komputera w konkretnym budynku i… sprawa jest umarzana. Dlaczego? W danym budynku może pracować 10 osób albo mieszkać 5 osobowa rodzina, wszyscy korzystają z tego samego komputera i nikt się nie przyznaje. Mogliby wtedy zadziałać, gdyby mieszkał tam jakiś samotnik, który miałby komputer ORAZ router domowy zabezpieczony tak, że tylko ona sam mógłby się tam zalogować.

Przywołałeś przykład sieci w jednym pokoju. Ten przykład jest o tyle korzystny dla Twojej tezy, że ludzie w jednym pokoju, gdy są podłączeniu do jednej sieci, będą prawdopodobnie widzieć swoje “bezpośrednie IP”, nie będzie widać urządzeń pośredniczących. W dalszym ciągu jednak żadna z osób, gdyby jej przedstawić numer IP, nie potrafiłaby powiedzieć, do którego urządzenia ono należy ani tym samym do jakiej osoby. Dodatkowo że końcowi użytkownicy zazwyczaj mają zmienne IP.

Wobec tego kiedy adres IP ma możliwość być danymi osobowymi? W połączeniu z dodatkowymi informacjami – najlepiej z loginem czy adresem e-mail użytym w którymś momencie podczas korzystania z Internetu. Wówczas adres IP rozszerza możliwości śledzenia działań danej osoby, aczkolwiek i tak jest w tym zupełnie kiepski. Stąd rozwijają się techniki tzw. internetowego fingerprintingu, które próbują skonstruować w sposób matematyczny unikalny numer identyfikacyjny użytkownika biorąc pod uwagę właściwości karty graficznej, rozdzielczości monitora i wiele, wiele innych informacji, które uzyskać można na temat internauty. Dużym problemem dla podmiotów śledzących jest śledzenie pracowników firm, bo Ci przeważnie nie tylko mają wspólny adres IP, ale zazwyczaj też identyczne komputery (firma zakupuje np. 200 sztuk identycznych w ramach przetargu). Nawet na to jednak znajduje się sposoby, np. wykorzystując błędy w protokole WebRTC do przechwycenia dodatkowych wewnętrznych adresów IP.


Teraz kilka cytatów z wyroku TSUE z dnia 19 października 2016 r. w sprawie C‑582/14. Sprawa dotyczyła zbierania adresów IP w logach serwerowych.

Trybunał uznał zasadniczo, że adresy IP użytkowników Internetu stanowią chronione dane osobowe, jako że pozwalają na precyzyjną identyfikację tych użytkowników. Niemniej powyższe twierdzenie Trybunału odnosiło się do przypadku, w którym gromadzenie i identyfikacja adresów IP użytkowników Internetu są dokonywane przez dostawców dostępu do Internetu.

Czyli adresy IP same w sobie są danymi osobowymi, gdy są przetwarzane przez operatorów telekomunikacyjnych. Wynika to z tego, że mają oni możliwości dochodzenia tożsamości użytkowników, której nie ma nikt inny. Dla nikogo innego nie są one danymi osobowymi same w sobie.

bezsporne jest, iż dynamiczny adres IP nie stanowi informacji odnoszącej się do „zidentyfikowanej osoby fizycznej”, jako że taki adres nie ujawnia bezpośrednio tożsamości osoby fizycznej będącej właścicielem komputera, z którego była przeglądana strona internetowa, ani tożsamości innej osoby, która mogłaby korzystać z tego komputera.

Czyli dynamiczny adres IP sam w sobie nie stanowi danych osobowych.

Należy jednak ustalić, czy możliwość połączenia dynamicznego adresu IP z owymi dodatkowymi informacjami będącymi w posiadaniu tego dostawcy dostępu do Internetu stanowi sposób, który może, racjonalnie rzecz biorąc, zostać zastosowany w celu zidentyfikowania osoby, której dane dotyczą.

Czyli adresy IP mogą stać się danymi osobowymi jeżeli ten, kto je przetwarza, dysponuje dodatkowymi informacjami.

dynamiczny adres IP zarejestrowany przez dostawcę usług medialnych online przy okazji przeglądania przez daną osobę strony internetowej, którą dostawca ten udostępnia publicznie, stanowi wobec tego dostawcy dane osobowe w rozumieniu tego przepisu, w sytuacji gdy dysponuje on środkami prawnymi umożliwiającymi mu zidentyfikowanie osoby, której dane dotyczą, dzięki dodatkowym informacjom, jakimi dysponuje dostawca dostępu do Internetu dla tej osoby.

To jest bardzo interesująca wypowiedź. Dotyczy ona sytuacji takiej, w której “dostawca usług medialnych” (np. serwis internetowy) może w świetle prawa zwrócić się do operatora telekomunikacyjnego (np. Netia, Orange etc.) o uzyskanie dodatkowych informacji o danym adresie IP celem np. wszczęcia postępowania karnego. Jeżeli takie coś jest możliwe prawnie w danym kraju, to wówczas można mówić o tym, że adres IP – nawet dynamiczny – stanowi dane osobowe.

Czy w Polsce w takim razie jest to możliwe? Wedle mojej obecnej wiedzy: nie. Operator może współpracować w tej sprawie np. z Policją, ale nie ze zwykłym “dostawcą usług”. Innymi słowy, dynamiczny adres IP nie jest wtedy daną osobową.

Co jednak w przypadku adresów IP pochodzących spoza Polski? Jeżeli byłyby kraje, z których operatorzy udzielaliby takich informacji wobec ludzi, których obsługują, wówczas naturalnie mielibyśmy dane osobowe.

Rozmaite uzupełniające rozważania na ten temat znalazłem też tutaj i polecam:

Dla kompletności wspomnę tutaj jeszcze o interpretacji GIODO zza czasów poprzedniej ustawy:

adres IP będzie uznawany za dane osobowe jedynie wówczas, gdy podmiot przetwarzający adres IP ma jednocześnie dostęp do danych łączących adres IP z innymi danymi identyfikującymi osobę. Do czasu, gdy podmiot nie uzyska pewności, że sam nie jest w stanie łączyć adresu IP z innymi danymi identyfikującymi osobę, powinien zabezpieczać adres IP tak jakby był on daną osobową.

Sztuczna inteligencja generuje sztuczną ludzką twarz na życzenie

Technologiczne portale piszą o tym od trzech dni, bo to fajna sprawa: ktoś stworzył stronę internetową która po każdym odświeżeniu generuje za pomocą sztucznej inteligencji nową ludzką twarz (albo też udostępnia ze zbioru uprzednio wygenerowanych twarzy, bo coś za szybko to działa). Wiele twarzy jest naprawdę nieźle wygenerowanych, trzeba chwili przyglądania się, aby zauważyć defekty: nieprawidłowy rozstaw zębów, niewłasciwy kształt ucha, coś nie tak z oprawkami okularów. No i raz na jakiś czas trafia sie obraz z wyraźną wadą. Tym nie mniej fajnie jest sobie móc generować ludzie twarze i zadumać się nad zjawiskiem ich percepcji. Oraz zadumać nad tym co nas czeka w przyszłości: np. spadek zapotrzebowania na modelów i modelki. Ich postacie będą mogły być doskonale wygenerowane.

Zajrzyjcie i poodświeżajcie przeglądarkę (najlepiej na małym ekranie, bo na dużym magia szybko pryśnie):
https://thispersondoesnotexist.com/

A tutaj można znaleźć m.in. gotowe 100 000 (!) wygenerowanych twarzy w ramach oraz tekst licencji (jeden z wariantów Creative Commons, w skrócie: do zastosowań niekomercyjnych można z tym robić wszystko):
https://drive.google.com/…/1uka3a1noXHAydRPRbknqwKVGODvnmUBX

Jak ktoś ma trochę zdolności programistycznych, to kod źródłowy generatora twarzy jest tutaj:
https://github.com/NVlabs/stylegan

Sztuczna inteligencja została wyuczona tworzenia nowych twarzy po zapoznaniu się z 70 000 prawdziwymi twarzami wziętymi z serwisu Flickr i udostępnionymi nam na wolnych licencjach:
https://github.com/NVlabs/ffhq-dataset

Ciekawostki

Ta sama technologia użyta do generowania twarzy postaci z japońskich kreskówek. Podejmowane są też próby z dziełami sztuki.

To jest trochę creepy, ktoś podłączył sztuczną inteligencję do tygodniowego archiwum zdjęć z fotobudki.

Więcej ciekawostek (aktualizacja 26 lutego)

  • https://www.thiswaifudoesnotexist.net/
  • https://thisartdoesnotexist.glitch.me/
  • http://thesecatsdonotexist.com/

Niepełnosprawni mogliby być astronautami

Interesujący tekst o tym, że osoby niepełnosprawne mogą pod pewnymi względami lepiej nadawać się do roli astonautów niż osoby pełnosprawne. Niektórzy niepełnosprawni są często zmuszeni do polegania na zewnętrznych pomocniczych urządzeniach, do których muszą dostosować swoje ciało, swoją percepcję, przez co mają lepiej rozwiniętą koordynację ręka-oko. Taki niepełnosprawny byłby prawdopodobnie lepszym użytkownikiem kombinezonu astronauty niż osoba pełnosprawna. W stosunku do niepełnosprawnych świat zewnętrzny jest częściej “obcy” i muszą wypracować sobie zdolność adaptowania się do niego, improwizowania rozwiązań, znajdowania nieoczywistych sposobów poruszania sie i interakcji. To bardzo pożądane cechy dla kogoś, kto będąc w przestrzeni kosmicznej naprawdę znajdzie się w innym świecie o innych regułach ruchu i oddziaływania. Artykuł przywołuje też i inne ciekawe przykłady dając do myślenia, że “pełnosprawny” to zasadniczo człowiek przystosowany do świata na powierzchni planety a niekoniecznie do stanów nieważkości i ograniczeń stacji kosmicznej.

Kalkulatory kolorów dla funkcji SCSS

Dla czystości kodu można chcieć utrzymywać w arkuszu SCSS niewielką liczbę podstawowych kolorów, które są przypisane do odpowiednich zmiennych, oraz na ich podstawie generować kolory pochodne za pomocą palety funkcji transformujących, które udostępnia SCSS – np. darken, adjust-hue i inne. Co jednak zrobić, gdy kolory są nam zlecane z zewnątrz już gotowymi wartościami RGB? Jeżeli znane są tutaj kolory podstawowe oraz pochodne, to można skorzystać z kalkualtorów wyznaczających zestaw funkcji transformujących!

Załóżmy, że głównym kolorem na naszej stronie WWW jest #679340, ale oto nagle nasz klient zgłasza nam potrzebę, aby w jednym miejscu tekst był “w tym kolorze ale ciemniejszy” i po chwili podsyła konkretnie dobrany odcień: #34523a. Wówczas korzystamy z jednego z wielu online-owych kalkulatorów:

Jak widzimy, wyniki są bardzo podobne. Różnią się szczegółami, ale ich wynik ostatecznie jest ten sam.

Aby ewentualnie dopomóc sobie i naszym klientom w doborze kolorów w taki sposób, aby od razu znać funkcję transformującą, warto skorzystać z Sass Color Generator, który pozwala w przejrzysty sposób obejrzeć i porównać różne warianty zmiany podstawowego koloru za pomocą funkcjo lighten, darken, saturate, desaturate.

Cyberpunkowe efekty do wykorzystania na stronach WWW

Zagrożenie wynikające z generowania numerów PESEL

Pewna pani za pomocą online-owego generatora numerów PESEL zaciągała pożyczki w bankach. Wyciągnęła 400 tys., złapali ją i teraz ma ponad 600 zarzutów. Przypadek jest ciekawy dlatego, że w zasadzie każdy może w każdej chwili sobie wygenerować jakiś PESEL za pomocą online-owych generatorów i posługując się nim zaciągać jakieś zobowiązania kosztem przypadkowych osób. Dodatkowo, ponieważ PESEL według RODO stanowi dane osobowe (Art. 2 pkt 1, Art. 87), to jeżeli ktoś sobie wygeneruje np. w Excelu wszystkie 1,826,210,000 kombinacje, to formalnie będzie miał bazę danych osobowych wszystkich Polaków. 😉

(Z ciekawostek: wiecie, że konstrukcja numeru PESEL narzuca ograniczenie na liczbę dzieci urodzonych danego dnia? Każdego dnia w całej Polsce może urodzić się maksymalnie 5000 chłopców i 5000 dziewczynek.)

Instalacja mcrypt dla PHP 7.2 w CentOS 7

Mcrypt został wyrzucony z pakietu PHP i teraz jest modułem PECL. Aby go uruchomić w CentOS 7 trzeba go pobrać i skompilować. Będziemy potrzebować takich pakietów:

sudo yum php72w-devel install gcc libmcrypt libmcrypt-devel re2c
sudo pecl install mcrypt-1.0.2

Później jeszcze trzeba dopisać do konfiguracji PHP: extension=mcrypt.so. Dopisek można zrobić w php.ini albo można utworzyć plik mcrypt.ini w folderze /etc/php.d.

Na końcu sprawdzamy czy wszystko działa jak należy: php –info | grep mcrypt. Jeżeli będzie OK, to dostaniemy rozmaite informacje a jeżeli nie, to nie będzie żadnego tekstu wynikowego.

Git pull bez nadpisywania plików konfiguracyjnych

Czasami można użyć Git jako proste i szybkie narzędzie do deploymentu – zespół deweloperski wystawia zmiany do repozytorium, do określonej gałęzi, a serwer produkcyjny zasysa zmiany poprzez git pull. Problem jednak w tym, że czasami zmiany te mogą nadpisywać pliki konfiguracyjne. Czasami konfiguracja nie jest scentralizowana w jednym pliku, który jest konsekwentnie ignorowany prez .gitignore, lecz z różnych przyczyn jest rozproszona po wielu plikach (np. .htaccess), które z różnych przyczyn nie powinny być niewersjonowane, aczkolwiek zwersjonowane w nich dane (np. dane dostępowe, loginy i hasła) nie powinny być inne niż czysto deweloperskie.

Można na to znaleźć różne rozwiązania. Prostym wydaje się git stash. Jest to polecenie, które aktualne zmiany w plikach (czyli różnice w stosunku do tego, co jest w repozytorium) odkłada do swojego rodzaju schowka, który zachowuje się jak sterta albo stos. Można więc składować kolejne zmiany “jedna na drugą” a później je z tego stosu zdejmować poleceniem git stash pop lub git stash apply (apply nie usuwa zmian ze stosu).

W najbardziej podstawowej wersji, gdy składujemy tylko jeden zestaw zmian, otrzymujemy więc schowek, do którego “wycinamy” zmiany i później je “wklejamy”. Możliwy jest więc taki przebieg synchronizacji plików z repozytorium, że:

  1. git stash – wycinamy pliki konfiguracyjne i składujemy w schowku;
  2. git pull – synchronizujemy wszystko z repo (pliki konfiguracyjne zostaną nadpisane);
  3. git stash pop – przywracamy pliki konfiguracyjne ze schowka,

W okolicznościach, w których chcemy szczególnie nadzorować jakie pliki zostaną nadpisane i ewentualnie manualnie rozwiązywać potencjalne konflikty, można rozpocząć od git fetch (aktualizacja bazy danych repo), przejrzeć listę zmian za pomocą git status oraz zbadać indywidualne zmiany za pomocą git diff.

Generowanie twarzy przez sztuczną inteligencję

Wytwarzanie zdjęć ludzkich twarzy przez sztuczną inteligencję osiąga już naprawdę imponujący poziom. Poniższy film zawiera wyłącznie zdjęcia twarzy wygenerowanych przez komputer i ilustruje opracowane przez badaczy metody sterowania procesem wytwarzania. Magicznie to wygląda.

Jako ciekawostka polecam jeszcze filmik z 2017 roku – twarze są niedoskonałe, ale za to psychodeliczność jest 10/10. Dało mi to do myślenia na temat tego jak postrzegamy jako ludzie:

Mogę to oglądać i oglądać i się zastanawiać.