technikalia

Technika w czystej postaci, wpisy nie tylko o hackowaniu, programowaniu i elektronice...

Automatyczne linki do dokumentacji w Hugo

W ostatnich moich wpisach o C++ odwoływałem się często do opublikowanego w sieci, w postaci strony HTML, standardu tego języka. Pomyślałem sobie, że zamiast w treści surowego wpisu dodawać bezpośrednie odnośniki do linkowanych fragmentów, dobrym pomysłem będzie używanie identyfikatorów (tych ze standardu) i przerzucenie całej roboty na generator strony. Nie ograniczając się tylko do cpp mógłbym obsłużyć też inne często linkowane dokumentacje. Taki mechanizm ma też inną zaletę – czystsza treść i prostsza forma wpisu bez linków do dokumentacji, a tym samym bezproblemowa zmiana miejsca docelowego wskazujących odnośników.

Czytaj dalej

Przeciążenia, specjalizacje i wyszukiwanie nazw w C++

Po ostatnim wpisie, gdzie w przedstawionych sposobach w wielu miejscach bazowałem głównie na możliwościach oferowanych przez przeciążenia funkcji i specjalizacje, dalej chciałbym poruszyć te ciekawe elementy i mechanizmy języka C++ jakimi bez wątpienia są właśnie przeciążania i specjalizacje, a także cały mechanizm wyszukiwania nazw. Ten obszar języka C++ wydaje się trochę skomplikowany, o czym może poświadczyć objętość materiału go opisującego. W dokumencie standaryzacyjnym języka C++ znajdziemy całe rozdziały o przeciążeniach (doc:cpp20:over), wyszukiwaniu nazw (doc:cpp20:basic.

Czytaj dalej

Blokowanie niejawnej konwersji w C++

W ostatnim wpisie napomknąłem coś o dawnych problemach z konstruktorami konwersji odnosząc się do mojego starego wpisu o niejawnych przekształceniach typów. Po przypomnieniu sobie jego treści postanowiłem podzielić się kilkoma, pewnie ogólnie znanymi, sztuczkami kontrolowania i blokowania niejawnych konwersji nie tylko przy typach zdefiniowanych przez użytkownika, ale też te standardowe konwersje zachodzące mimowolnie pod maską języka C++ ;) Wykluczenie metody z niejawnej konwersji (explicit) We wspomniane notce do zapobiegania niejawnych konwersji do typu użytkownika użyto specyfikatora explicit w towarzystwie konstruktora konwersji.

Czytaj dalej

Niespójne i mylące konstruktory w std::string

Kiedyś często problemem były niejawne konwersje między typami w C++, które szczególnie uwidaczniały się przy konstruktorach konwersji… Kto by pomyślał, że dziś nadał trywialne błędy można popełnić przez jakieś zaszłości historyczne, usilne zachowanie kompatybilności i brak spójności w definiowaniu konstruktorów, nawet tych w Standardzie ;) Problemy te co jakiś czas są na nowo “odkrywane”, ostatnio powróciły w nieco prześmiewczym kodzie na twitterze: const std::string str = "Modern C++"; std::string s1 { "Modern C++", 3 }; std::string s2 { str, 3 }; std::cout << "S1: " << s1 << "\n"; std::cout << "S2: " << s2 << "\n"; Intuicyjnie mogłoby się wydawać, że obiekty s1 i s2 będą zawierać taką samą zawartość.

Czytaj dalej

Generowanie plików z pomocą Hugo Pipes

W ostatniej mojej notce przedstawiłem prosty sposób na tworzenie w Hugo dodatkowych plików za pomocą niestandardowych formatów wyjściowych, a dzisiaj chciałbym spróbować do tego celu wykorzystać “pipki” (Hugo Pipes). Tematyka nadal będzie poruszać się wokół mapy przekierowań ;)

Generowanie mapy przekierowań z Aliasów w Hugo

Hugo posiada możliwość udostępniania stron pod różnymi adresami za pomocą aliasów, które “przekierowują” do głównej treści. Może to być bardzo przydatne przy zmianach adresu danej podstrony. Ja nie korzystam z tego mechanizmu, ale chciałem sprawdzić czy można zmusić Hugo do wygenerowania pliku z mapą przekierowań (redirects.txt), bazując na zdefiniowanych w treści aliasach. To pozwoliłoby przekształcić je w pełnoprawne przekierowania 301. Aliasy w Hugo Dokumentacja dotycząca aliasów jest dość krótka i w prosty sposób opisuje działanie tego mechanizmu.

Czytaj dalej

Masowe przekierowania z RewriteMap (Apache)

Przy migracji i poprawianiu starych wpisów zaktualizowałem niektóre tytuły, tym samym ich adresy URL uległy zmianie. Dla zachowania kompatybilności, szczególnie z zewnętrznymi odnośnikami, wypadałoby dodać jakieś przekierowania co do niektórych wpisów. I przypadkiem odkryłem ciekawy sposób na masowe przekierowania w Apache. Początkowo chciałem napakować swój .htaccess dyrektywami z mod_alias-a: Redirect 301 /old-post-slug /new-post-slug # old url posted on some external website Redirect 301 /1999/hacking-forum /hacking-forum-scripts Wydawało mi się to jedynym wyjściem.

Czytaj dalej

Przyspieszanie strony - zapytania/cache/kompresja w HTTP

Moje eksperymenty z przyspieszeniem bloga, czyli minimalizacja zapytań, cache i kompresja w HTTP. Minimalizacja zapytań Cache Kompresja

Kanały RSS/Atom w Hugo

Mój statyczny blog już działa, choć wymaga jeszcze trochę poprawek. Jednym z ważniejszych elementów wymagających dopracowania są kanały RSS/Atom. To przecież wciąż jedyna słuszna metoda syndykacji i notyfikacji o zmianach na stronie. Hugo w standardzie wspiera i automatycznie generuje kanały RSS. Niestety domyślne ustawienia i założenia nie spełniają moich specyficznych potrzeb, więc nadeszła pora na dostosowanie… i generowanie własnego kanału ;) RSS 2.0 i domyślny szablon Hugo posiada wbudowany wewnętrznie szablon dla kanałów RSS 2.

Czytaj dalej

MalLog już statycznie!

Po dwóch tygodniach opóźnienia, wreszcie udało mi się ogarnąć większość rzeczy na tyle, aby móc wrzucić do sieci jako tako działająca wersję nowej statycznej odsłony mojego sieciowego dziennika. Niestety jest jeszcze wiele niedoróbek i o kilku tutaj napiszę w wolnej chwili ;)