Kawałek Kodu

Co tu się odskryptala?! Czyli programistyczne porady na luzie

Doctor, doctor, doctor... Czyli jak uzupełnić tablicę do zadanej długości.

Czasem zdarza się, że potrzebujesz dopełnić tablicę lub string do długości innej, większej niż aktualna długość elementu. Np. z jakiegoś powodu chcesz aby tablica miała zawsze 100 elementów.

W przypadku tablicy w PHP używamy funkcji array_pad:

$array = [1, 44, 13, 23];
$array = array_pad($array, 10, 15);

Wynikiem działania tej funkcji będzie tablica dziesięcioelementowa, dopełniona "od prawej strony" sześcioma elementami o wartości 15.
Argument drugi może przyjąć wartość ujemną. Wtedy dopełnienie następuje na początku tablicy.

Czytaj dalej

Czy to ty czy to ja? Czyli duplicate content.

Zjawisko "duplicate content" zachodzi wtedy, kiedy treść Twojego serwisu w całości lub jego części, jest osiągalna pod tymi samymi adresami URL jednocześnie. Dla wyszukiwarek domena mojadomena.pl oraz www.mojadomena.pl to dwa niezależne adresy. Jeśli serwis oferuje tą samą treść pod adresem "z www" jak i "bez www" (lub odwrotnie), lub też zawartość pod adresem /podstrona/ jest identyczna jak pod adresem /podstrona/?sort=asc, to mamy do czynienia własnie z tym okropnym zjawiskiem. Jako przykład tej drugiej sytuacji może posłużyć podstrona z prezentacją produktów, na której mamy możliwość sortowania listy według zadanych parametrów. Parametry przesyłamy w postaci query string (jako zmienne GET). Pomimo, że wizualnie lista się zmienia, to produkty wciąż widnieją te same, a skoro zawartość jest taka sama, to robot indeksujący odbiera to właśnie jako tytułowe zjawisko. Różnica w URL może zachodzić nie tylko na poziomie query string, ale już w path (to ten fragment zaczynający się po nazwie domeny).

Jest to efekt niepożądany ze względu na obniżenie wartości strony w indeksie Google. Metody, które przestawiam tyczą się tylko adresów URL. Nie mają natomiast zastosowania w przypadku kiedy Twój brat lub siostra bliźniak podkrada Ci gumy do żucia - tu lepiej zastosować przekierowanie problemu na rozmowę w cztery oczy (życzę Ci w tej sytuacji osiągnięcia statusu 301).

Czytaj dalej

Scopana metoda, czyli dlaczego selektor > oraz + nie zawsze działa.

Kupujesz wysyłkowo lampkę odstraszającą owady, okazuje się, że żarówka jest spalona. Zamawiasz buty przez internet, za ciasne. Wreszcie rozpakowujesz paczkę, w której czeka wymarzy robot kuchenny, który będzie pasował pod kolor kuchni, dostajesz zupełnie inny kolor. Ręce opadają. Te opadają też czasem przy walce z przeciwnościami podczas programowania. Dziś pokażę Ci jedną z takich kłód rzucanych pod nogi, ale zastrzegam: nie jest to złośliwość twórców przeglądarek, ani też ich przeoczenie.

Zacznijmy od przykładu nawiązującego do tytułu.

<body>

<ul id="element1">
 <li></li>
 <li></li>
 <li></li>
</ul>

</body>

Spróbujmy teraz pobrać z powyższej struktury bezpośrednie dzieci #element1, które są tagami LI.

var li = document.getElementById("element1").querySelectorAll(">li");

I co otrzymałeś próbując wyświetlić wyniki z pomocą console.log?
Dlaczego tak się stało, o tym dalej.

Czytaj dalej

Kochanie, trzeba brać szalik? Czyli segregowanie rekordów w przedziałach.

Mamy tabelę z danymi, a jedna z cech danej (kolumna tabeli) jest wartością liczbową, którą chcemy przyporządkować do wybranego z ustalonych, nazwanych zakresów. W naszym przykładzie będzie to tabela temperatur.

temperatura
-23,5
-34,1
-36,6
-31,0
-26,8
17,0
-22,1
-5,7
-35,9
-34,5
34,0
39,1
5,0
6,4
-40,0

Przy małej ilości zakresów można to oczywiście osiągnąć poprzez konstrukcję CASE WHEN, np.:

Czytaj dalej

Palcem po mapach, czyli sitemap dla strony wielojęzykowej.

Jeśli Twój serwis jest wielojęzykowy, to pewnie użyłeś jednego ze sposóbów na przekazywanie wersji językowej w adresie URL:

  1. Zmienna językowa w query string, np.: http://mojadomena.pl/podstrona?lang=pl
  2. Zmienna językowa jako podkatalog, np: http://mojadomena.pl/en/podstrona/
  3. Zmienna językowa jako subdomena, np: http://en.mojadomena.pl
  4. Zmienna językowa przypisana do domeny (odrębna dla każdej domeny), np: http://mojadomena.pl, http://mojadomena.co.uk

O ile w pierwszym i drugim przypadku budowa mapy jest oczywista, bowiem mapa zawiera wszystkie URL niezależnie od języka, tak w przypadku subdomeny lub domeny wyłącznie dla jednego języka, mapa będzie zawierać URL tylko z tej wersji językowej. A skoro serwis fizycznie zajmuje to samo miejsce na serwerze, tak więc i mapa serwisu dla każdej wersji jezykowej będzie w tym samym miejscu.
Ale przecież zgodnie z sugestią Google plik mapy ma mieć ustaloną nazwę, np. sitemap.xml (dla mapy w formcie XML) lub sitemap.txt (dla mapy w postaci pliku tekstowego). Na pewno nie mogą to być pliki o nazwach sitemap_pl.xml dla wersji polskiej i sitemap_en.xml dla wersji angielskiej.

Czytaj dalej

Podczerwień czy nadfiolet, czyli kolor najbliższy spośród możliwych.

Ooo, już nie będzie tak kolorowo jak przy poprzednich wpisach. Zapoznamy się z problemem wyszukiwania podobnego (najbliższego) koloru dla zadanego koloru, przy założeniu, że działamy w ograniczonej palecie (np. mamy do czynienia z paletą indeksowaną).

Być może nie miałeś w ogóle styczności z tym problemem i czytasz wpis tylko z czystej ciekawości (co mnie również bardzo cieszy), więc wyjaśnię Ci na początek czym jest paleta indeksowana.

Z tym rodzajem palety mamy do czynienia, kiedy przechowujemy tabelę zawierającą pod kolejnymi indeksami kolory użyte w pliku graficznym.
Nie ma więc tu sytuacji, że każdy element grafiki (załóżmy piksel) jest określony przez indywidualny kolor. Zakładając, że mamy do czynienia z trybem RGB (bez kanału alpha) i pikselem białym w prawym górnym rogu, jest on określony poprzez grupę bajtów 255, 255, 255, a kolor czarny na prawno od niego, określony jest jako 0,0,0. Jeśli trzeci piksel jest znów biały, to jego miejsce w pliku zajmuje grupa 255, 255, 255.
W przypadku grafiki opartej na palecie indeksowanej, kolor biały może być przechowywany pod indeksem 0 w tabeli palety, a kolor czarny pod indeksem 1 tejże tabeli. Kolejność przechowywania kolorów w tabeli palety nie ma żadnego znaczenia, tzn. kolory nie muszą być ustawione w kolejności jasności czy relatywnie do położenia na kole barw. Tu trzy piksele (biały, czarny, biały) grafiki, będą reprezentowane w pliku poprzez wartości 0, 1, 0, odpowiadając indeksom w tabeli palety, czyli de facto kolorom, ale nie w sposób bezpośredni.

Rezprezentacja w pamięci obrazu (3 piksele) opartego o paletę bezpośrednią:

255,0,0 0,255,0 255,255,0 255,0,0
Czytaj dalej