Można dodawać komentarze, z podglądem na żywo. Zanim zostaną pokazane muszą przejść moderację (patrz tu i tu). Standardowo zapraszam do testów pod adresem krzaq.cc:8080.
Tak na dobrą sprawę można to już uznać za kompletny MVP.
The next gen of old-school blogging
Można dodawać komentarze, z podglądem na żywo. Zanim zostaną pokazane muszą przejść moderację (patrz tu i tu). Standardowo zapraszam do testów pod adresem krzaq.cc:8080.
Tak na dobrą sprawę można to już uznać za kompletny MVP.
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…
Jestem w trakcie dodawania możliwości komentowania. Baza już gotowa, muszę jeszcze dorobić obsługę dodawania, moderowania i wyświetlania komentarzy. Ale już teraz działa podgląd na żywo tego jak komentarz będzie wyglądał. Wystarczyło podpiąć REST-owe API do prostego skryptu w js.
Efekt jest całkiem zadowalający1:
Wszystkie powtarzające się wywołania HQL zostały przeniesione do jednego szablonu. Dzięki temu klasa DBCache całkiem przyjemnie teraz wygląda.
Na przykład obsługa ustawień stała się trywialna:
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.
Dopisałem kod tworzący kanały RSS. Na razie jest to wersja alpha – tylko dla wersji językowych (np: http://krzaq.cc:8080/rss/lang/en). Następnym zadaniem będzie dodanie RSS dla tagów, a przyszłościowo – dla komentarzy. Niemniej jednak, MVP zbliża się wielkimi krokami.
Commit odpowiedzialny za to można znaleźć tutaj: [link]
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; } |
Google (z dopiskiem dlang lub site:dlang.org) to całkiem niezły pomysł, ale niestety można się natknąć na tematy z pytaniami sprzed dekady.
Ostatnio powstał nowy projekt o nazwie dpldocs, tworzony przez jednego z bardziej aktywnych członków społeczności D: Adama D. Ruppe.
Link do projektu: https://dpldocs.info/
Uprzedzając krytykę: słyszałem o czymś takim jak debugger. Nie zawsze ma on jednak zastosowanie:
Z powyższych powodów (ale głównie ostatniego), utworzyłem sobie proste makro w C++ pozwalające czytelnie przedstawiać zawartość zmiennych: