Strona główna » Informatyka

Kategoria: Informatyka

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

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.

Słowniki odmian słów polskich – załadowanie do bazy MySQL

Aby załadować słowniki SGJP i/lub Polimorf do bazy MySQL należy pobrać bazy słownikowe w postaci plików “*.tab” (wewnętrznie jest to format TSV) i wydać następujące polecenia:

CREATE TABLE `words` (
	`inflected` VARCHAR(38) NOT NULL COLLATE 'utf8_general_mysql500_ci',
	`id` VARCHAR(35) NOT NULL COLLATE 'utf8_general_mysql500_ci',
	`description` TINYTEXT NOT NULL COLLATE 'utf8_general_mysql500_ci',
	`additional` TINYTEXT NULL COLLATE 'utf8_general_mysql500_ci',
	`additional2` TINYTEXT NULL COLLATE 'utf8_general_mysql500_ci',
	INDEX `inflected` (`inflected`),
	INDEX `id` (`id`)
)
COLLATE='utf8_general_mysql500_ci'
ENGINE=InnoDB
;

CREATE TABLE `words_polimorf` (
	`inflected` VARCHAR(45) NOT NULL COLLATE 'utf8_general_mysql500_ci',
	`id` VARCHAR(40) NOT NULL COLLATE 'utf8_general_mysql500_ci',
	`description` TINYTEXT NOT NULL COLLATE 'utf8_general_mysql500_ci',
	`additional` TINYTEXT NULL COLLATE 'utf8_general_mysql500_ci',
	`additional2` TINYTEXT NULL COLLATE 'utf8_general_mysql500_ci',
	INDEX `inflected` (`inflected`),
	INDEX `id` (`id`)
)
COLLATE='utf8_general_mysql500_ci'
ENGINE=InnoDB
;

LOAD DATA LOW_PRIORITY LOCAL INFILE 'F:\\sgjp-20180923.tab' REPLACE INTO TABLE `words` FIELDS TERMINATED BY '	' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\n' IGNORE 29 LINES (`inflected`, `id`, `description`, `additional`, `additional2`);
/* 7 224 173 rows imported in 91,594 seconds. */

LOAD DATA LOW_PRIORITY LOCAL INFILE 'F:\\polimorf-20180923.tab' REPLACE INTO TABLE `words_polimorf` FIELDS TERMINATED BY '	' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\n' IGNORE 32 LINES (`inflected`, `id`, `description`, `additional`, `additional2`);
/* 7 374 866 rows imported in 270,469 seconds. */

Można to też sobie wyklikać w HeidiSQL. Parametry importowania plików TAB są takie:

Dekodowanie zawartości kolumny “description” można znaleźć w tej publikacji, rozdział 5.

Serwer kafelkowy OSM szybko i bezboleśnie dzięki dockerowi

Uruchomienie serwera kafelkowego OSM wedle oficjalnych instrukcji instalacyjnych potrafi być nie lada wyzwaniem. Dużo prędzej i znacznie bardziej bezboleśnie jest użyć odpowiedniego dockerowego kontentera – w tym wypadku overv/openstreetmap-tile-server. Poniższe instrukcje uruchamiają serwer kafelkowy dla obszaru Polski i czynią go dostępnym poprzez 127.0.0.1:10001/tile/. Czytaj więcej…

Uwierzytelnianie dwuskładnikowe w Webminie

Wiele punktów wejścia do systemu można sensownie zabezpieczyć: SSH na klucze zamiast haseł czy MySQL na certyfikaty clienckie, ale w przypadku Webmina albo trzeba się odizolować od sieci zewnętrznej, albo stosować bardzo silne hasła, albo spróbować uwierzytelniania dwukładnikowego. Ostatnio zdecydowałem się użyć takie oparte o Google Authenticator.

Czytaj więcej…