@interface: Ja do niekryptograficznego hashowania używam po prostu wyniku działania (+ oznacza dodawanie modulo np. 2^32):
pierwszy (najmniej znaczący) bajt + drugi bajt * 31 + trzeci bajt * 31^2 + czwarty bajt * 31^3...
gdzie zamiast 31 można wybrać inną liczbę pierwszą.
Przypomnienie, że społeczność i ludzie za #stackoverflow stworzyli ebooki z kursami programowania z dziesiątek najpopularniejszych technologii #programowanie #naukaprogramowania https://goalkicker.com/

Książki nie tylko uczą podstaw, ale też pokazują co jest używane w pracy, poza uczelnią.
https://goalkicker.com/

```

for book in $(wget -q -O- [http://books.goalkicker.com/](http://books.goalkicker.com/) | grep "bookContainer grow" | sed 's/.*href="\([^"]*\)".*/\1/'); do
  wget "[http://books.goalkicker.com/$](http://books.goalkicker.com/$){book}/$(wget -q -O- "[http://books.goalkicker.com/$](http://books.goalkicker.com/$){book}" | grep 'preview' | sed 's/.*href="\([^"]*\).*/\1/')"
done
```

#interfacesmieci