dbcache.d umie już cache’ować listy

Dzięki temu wszystkie wyszukania (po tagach, językach, autorach, etc) będą bardzo szybkie. Sama implementacja widoczna jest tutaj. Niestety, nie obyło się bez drobnej duplikacji kodu (“done is better than perfect”), którą trzeba będzie usunąć. Na szczęście nie będzie z tym wiele roboty.

Na maszynie testowej czas generowania listy spadł z 6ms do standardowych ~200µs.

Przy okazji miałem okazję pobawić się z variadic templatkami w D…

Refaktoring dbcache.d rozpoczęty

Pisząc kolejne metody do cache DB ciężko było nie zauważyć, że znaczna część ich kodu się powtarza. Z tego powodu utworzyłem szablon CacheElement (nazwa robocza).

Jednocześnie operacje na samej bazie przeniosłem do osobnego szablonu DBElementDriver (nazwa jeszcze bardziej robocza), który jest odpowiedzialny za wykonywanie odpowiednich zapytań w bazie danych. Parametrami tego szablonu są: klasa elementu oraz nazwa pola odpowiadającego za klucz.

Zanim użyjesz projektu open-source, upewnij się, że nie został porzucony

Do użycia ORM-a przekonał mnie znajomy. W założeniu: super. Nie będę się rozpisywał czym jest ORM i jakie funkcjonalności ma spełniać – na pewno jest to wielokrotnie opisane przez bardziej kompetentnych w tym zakresie ludzi. Dość powiedzieć, że dzięki temu korzystam z natywnych klas reprezentujących dane, np.:

class PostData
{
    @Generated @Id int id;
    Post post;
    string title;
    string markdown;
    string excerpt;
    Nullable!string gpg;
    DateTime timestamp;
    @ManyToMany Tag[] tags;
}

printf debugging – czytelne i wygodne wypisywanie zmiennych

Uprzedzając krytykę: słyszałem o czymś takim jak debugger. Nie zawsze ma on jednak zastosowanie:

  • debuggery często nie radzą sobie z bardziej zaawansowanymi typami zmiennych (zaczynając ju​ż od C++-owego std::string, o klasach w D nie wspominając),
  • czasem zachodzi potrzeba sprawdzenia większej liczby przebiegów programu lub funkcji. Przechodzenie tego wszystkiego pod debuggerem to nieporozumienie,
  • może nie być w ogóle możliwości użycia debuggera – n.p. w przypadku sprzedaży oprogramowania,
  • wyciąganie armaty (debuggera) na mały problem-muchę również może być znaczącą przesadą.

Z powyższych powodów (ale głównie ostatniego), utworzyłem sobie proste makro w C++ pozwalające czytelnie przedstawiać zawartość zmiennych: