Muszę przyznać, że jako osoba mająca poważniejszy kontakt z IT od kilkunastu lat (a jakikolwiek od ponad dwudziestu), słowa "maska" użyłem mniejszą liczbę razy niż nasi klienci na przestrzeni ostatnich miesięcy. To jest o tyle dziwne, że ten termin jak najbardziej jest używany w systemach, programowaniu oraz ogólnie informatyce i ma dość specyficzne znaczenie, natomiast słyszałem je już w takich kontekstach, o których mi się nawet nie śniło. I nie jest to złośliwość - fascynuje mnie to, że w różnych branżach można znaleźć słowa, które służą do opisywania różnych pozornie podobnych, ale jednak różnych zjawisk i na przecięciu poszczególnych obszarów powstaje wieloznaczność, której "odkowanie" sprawia pewną satysfakcję, gdyż niesie ze sobą także informację o tym, jakie są doświadczenia uczestników dyskusji. Uff, dawno nie napisałem dłuższego zdania.
Natomiast nie da się ukryć, że słysząc tu i ówdzie o masce, nie zawsze od początku wiedziałem, o co chodzi rozmówcy. Jednak tak, jak pisałem wyżej - wraz z poznawianiem kontekstu i środowiska, w którym operuje interlokutor, dowiadywałem się więcej nie tylko o tym, co oznacza to słowo w danym przypadku, ale też w czym pracowali do tej pory użytkownicy. A to często bardzo ważna informacja na etapie ustalania wymagań pozafunkcjonalnych oraz generalnie wizji funkcji w oprogramowaniu.
Postanowiłem zebrać znaczenia maski i je krótko opisać. Niektóre są bardziej "sformalizowane" i jak najbardziej mówi się o nich w informatyce, a z innymi spotkałem się w konkretnych przypadkach i możemy wspólnie zastanowić się, skąd właściwie się wzięły.
Maska jako definicja podsieci
To, z czym większość informatyków kojarzy słowo "maska" w IT, to właśnie sieci komputerowe, a dokładniej - ciąg liczb (lub liczba) określający podział adresu sieci na adres podsieci i adres hosta. I zanim zaczniecie zastanawiać się, co właściwie tutaj przeczytaliście, to polecam zrobić dwie rzeczy - po pierwsze, odświeżyć sobie informacje o adresach IP oraz włączyć konsolę (wiersz polecenia w Windowsie lub terminal w Linuksie) i wpisać ipconfig
, ip a
lub ifconfig
. Powinniście zobaczyć coś podobnego do jednego z tych zapisów:
IPv4 Address. . . . . . . . . . . : 192.168.0.16
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.0.1
--
inet 192.168.0.16 netmask 255.255.255.0 broadcast 192.168.0.255
--
inet 192.168.0.16/24 brd 192.168.0.255
Jeśli porównacie to teraz z artykułem o adresach IP i znajdującą się tam sekcją podziału sieci na podsieci, to właśnie znaleźliście miejsce, gdzie możecie przeczytać:
- jaki jest Wasz adres IP w sieci lokalnej,
- jaka jest maska (zapisana normalnie, np.
255.255.255.0
lub w notacji CIDR, np./24
), - jaki jest adres broadcastu.
Mówiąc bardziej obrazowo: maska wyznacza granicę, gdzie kończy się bazowy adres dla całej sieci (np. lokalu), a gdzie zaczyna część, która jest unikalna dla każdej maszyny w sieci. Można to skojarzyć z numerem bloku (adres sieci) i mieszkaniami (adresy poszczególnych hostów, zwanych też klientami). Im większa maska, tym mniej adresów dla klientów jest do rozdysponowania. Im mniejsza - adres jest bardziej ogólny, a klientów może połączyć się dużo więcej - jest to związane z tzw. klasami sieci. Zapis CIDRowy, wykorzystujący slasha, pokazuje nam liczbę "jedynek" w zapisie normalnym - z formy binarnej wiemy bowiem, że tak naprawdę 255.255.255.0
to 3 grupy po 8 jedynek i 4 zera na końcu. Ile zatem mamy łącznie "jedynek"? Otóż, właśnie - 3 * 8 = 24. Oczywiście, maska zapisana w ten sposób nie musi być wielokrotnością ósemki, choć trzeba przyznać, że często tak się właśnie dzieje.
Jak pewnie się spodziewacie, rozmowy o takich maskach zazwyczaj odbywają się w gronie administratorów lub podczas konfigurowania dużej sieci w firmie, o ile klient jest (lub chce być) świadomy szczegółów infrastruktury. W przypadków rozmów o aplikacji - myślę, że wspomnienie o tym znaczeniu tego słowa byłoby dużym zaskoczeniem.
Maska jako określenie włączonych bitów
Gdy popatrzymy bardziej "filozoficznie" na powyższą sekcję o podsieciach, dostrzeżemy znaczenie słowa "maska" - tak, jak normalnie zakrywa ona twarz, ukazując to, co chcemy, tak w sieciach chowa ona jedną część, aby uwypuklić drugą. Tak naprawdę jest to nakładanie na siebie adresów złożonych z tylu samych cyfr binarnych i porównywanie, gdzie jedynki przykrywają zera lub gdzie cyfry w obu adresach są takie same. Te dość proste operacje wykorzystuje się nie tylko w podsieciach, ale czasem też np. w sprawdzaniu uprawnień.
Wyobraźmy sobie, że mamy ciąg bitów, które odpowiadają poszczególnym możliwościom użytkownika w systemie:
- pierwszy bit (licząc od lewej) - możliwość wyświetlenia listy produktów.
- drugi bit - możliwość utworzenia produktu.
- trzeci bit - możliwość edycji produku.
- czwarty bit - możliwość usunięcia produktu.
Załóżmy, że dla zalogowanego użytkownika pobierana jest maska bitowa, której wartość to 1100(2)
. Z kolei do wyświetlenia listy produktów potrzebne jest porównanie z ciągiem 1000(2)
, a dokładniej - wykonanie iloczynu bitowego. W tym przypadku bedzie on wynosił 1000(2)
, co oznacza, że użytkownik ma możliwość wyświetlenia listy. Ale gdybyśmy sprawdzali możliwość usunięcia (0001(2)
), wynik byłby już negatywny, gdyż nie ma wspólnych jedynek na określonych pozycjach.
Oczywiście, ten przykład jest dość naiwny i sztuczny, jednak fakt, że ten sposób sprawdzania uprawnień, ról czy innych rzeczy nadal jest obecny w aplikacjach i wykorzystuje szybkość, z jaką przeprowadzane są operacje na bitach. Wadą jest to, że w przypadku bardzo dużej liczby elementów do weryfikacji, ten ciąg może być niezwykle długi, co rodzi problemy z zapisem i przetrwarzaniem. Ale i tak warto o tym wiedzieć, szczególnie przy analizie programów tworzonych przez inne firmy.
Maska jako format wprowadzanych danych
Idziemy dalej ze skojarzeniem maski z czymś, co zasłania część danych, pokazując to, co rzeczywiście chcemy, aby było pokazane. Programiści frontendów aplikacji webowych w niektórych kontrolkach wykorzystują maskowanie danych, aby nakłonić lub wręcz zmusić użytkownika do podania wartości w określony sposób. Klasycznym przykładem jest kontrolka numeru telefonu, który ma w miarę określony kształt - najpierw kod kierunkowy, a potem cyfry zgrupowane po trzy lub dwie. Innym przykładem jest kontrolka do podania daty w formacie dzień.miesiąc.rok. Dzięki temu programiści mogą też ułatwić sobie walidację podanej wartości, wiedząc, czego mniej więcej mogą spodziewać się od wprowadzającego (aczkolwiek trzeba przyznać, że użytkownicy potrafią być... bardzo kreatywni).
Jest też inny sposób maskowania w kontrolkach webowych, a mianowicie ukrywanie wpisanych znaków poprzez ich zamianę na inny, stały znak. I tutaj każdy z nas doskonale zna przykład takiego zachowania - jest to miejsce, w którym wpisujemy hasło, a które od razu jest zamienianie na gwiazdki, kropki lub inne symbole, aby nie można było go podejrzeć. Zresztą nie tylko podejrzeć - także skopiowanie tak wpisanego tekstu nie pozwoli wkleić go w inne miejsce.
Ale nie tylko w aplikacjach webowych mamy do czynienia z taką sytuacją - także w innych zastosowaniach możemy mówić o formatowaniu wpisywanych danych lub zakodowaniu miejsca, w którym może pojawić się ciąg znaków według danej reguły. Klasycznym przykładem są wyrażenia regularne, szczególnie w ścieżkach do plików. Nota bene, wyrażenia regularne to materiał na osobny artykuł, gdyż ich wykorzystanie w informatyce jest nieocenione.
Maska jako element warstwy w grafice
W tym momencie mogą się odezwać graficy, którzy też znają maskowanie i w którym znowu chodzi o oznaczenie danego obszaru, ale tym razem po to, aby nadać temu odpowiedni kolor lub efekt. Co ciekawe, maski służą do słynnych operacji wymazywania osób lub obiektów ze zdjęć albo podmiany elementów otoczenia. Można je edytować i wykonywać na nich różne dzialania, w zależności od tego, co umożliwia program graficzny oraz wyobraźnia samego grafika.
Maska jako ekran szczegółów
Bardzo ciekawym przypadkiem było użycie terminu "maska klienta", które usłyszałem podczas jednej z rozmów na temat projektu IT. Przyznaję, że przez pewien czas nie wiedziałem, o co chodzi - znając cały (dużo większy niż opisuję tutaj) kontekst rozmowy, początkowo podejrzewałem, że jest maska bitowa dołączona do obiektu klienta, jednak trudno było mi sobie wyobrazić, aby była ona widoczna w interfejsie użytkownika, a właśnie wokół tego krążyła rozmowa. Wreszcie, okazało się, że "maska" w tym przypadku to nic innego jak... ekran szczegółów.
W ogóle tego typu widoki zyskują nazwy bardzo zależne od tego, w jakim środowisku porusza się zleceniodawca projektu i z jakimi programami miał do tej pory do czynienia. Niektórzy faktycznie mówią na to "ekran szczegółów". Inni użyją słowa "detale". Jeszcze inni (szczególnie w branży medycznej) - "karta" lub "kartoteka". Są też tacy, którzy powiedzą po prostu "widok" i jeśli nie dodadzą niczego innego, to można założyć, że chodzi właśnie o ekran danych pojedynczego obiektu. Zresztą, w języku angielskim również jest pewna dowolność, gdyż w użyciu jest zarówno słowo "details", jak i "view".
Natomiast "maska" jest interesującym sformułowaniem w tym obszarze, gdyż sugeruje, że dane np. klienta (lub jakiegokolwiek innego obiektu) przysłaniają pewne informacje lub nakładają się na siebie, np. pod wpływem uprawnień. Tym niemniej, jest to bardzo dziwne słowo i prawdopodobnie wynika ze specyficznej terminologii programu, z którego korzystał zleceniodawca.
Pod maską
Wreszcie sformułowanie, którego używamy bardzo często my, programiści. Wyobraźcie sobie, że musicie wytłumaczyć osobie nietechnicznej, że wycena nowej funkcji jest bardzo duża, natomiast interfejs użytkownika będzie zaskakująco skromny. W związku z tym klient może słusznie zapytać, gdzie podziało się tak dużo godzin, skoro tak naprawdę nie widzi tych efektów, a przynajmniej tak mu się wydaje. Odpowiedzią może być np. skomplikowana logika po stronie backendu, tylko że takie sformułowanie może być dość nieszczęśliwe w przypadku, kiedy rozmawiamy z osobą bez wiedzy technicznej i która w dodatku negocjuje cenę.
W tym przypadku warto odnieść się do analogii motoryzacyjnej - problem z samochodem może być widoczny na zewnątrz, ale może też dotyczyć silnika, gdzie zwyczajowo powiemy "pod maską". Jest to zatem określenie czegoś, co dzieje się poza granicą wzroku zwykłego odbiorcy, a tak dokładnie jest z backendem - użytkownik zazwyczaj nie ma dostępu do tej części systemu i nie może podejrzeć tego, co tam sie znajduje, a zatem może nie do końca umieć sobie to wyobrazić, co z kolei rodzi frustrację. Dlatego określenie "pod maską" jest na tyle uniwersalne, że warto go używać. Oczywiście, jeśli jest to zasadne.
Podsumowanie
Mam nadzieję, że udało się zaskoczyć Was choć jednym znaczeniem tego słowa w IT, a i pewnie niektórzy znajdą jeszcze inny kontekst użycia tego sformułowania. To przykład na to, jak rozbudowaną dziedziną stało się IT i jak nowa terminologia rodzi się w wielu punktach w niezależny sposób.
Pozdrawiam i dziękuję - Jakub Rojek.