Core 3.1 Korzystając z wolnego czasu, pomyślałem, że pora wrócić na mojego bloga. Przez wiele miesięcy miałem wizję co ulepszać na tym blogu. Wiesz mi. Prowadzenia bloga w kontekście wielu lat tworzy wyzwanie trzymania tego wszystkiego w sensownej kupie. Mam tutaj 700 wpisów w końcu :)

Dla przypomnienia początki tego bloga zaczęły się na blogerze platformie Google. Tam się irytowałem, że nie mam dużej kontroli nad stroną, gdzie zawieram swoje wpisy. 

Przeniosłem więc bloga na swój własny serwer.

Zamiast jednak skorzystać rozwiązania WordPress. Ja postanowiłem mieć bloga w C#. Co tu dużo mówić jestem fanem platformy .NET  nawet do dziś. Wybrałem wtedy silnik blogowy BlogEngine. 

Ten silnik blogowy okazał się jednak bardzo niestabilny i bałem się, że w każdej chwili ten blog eksploduje.

Zrobiłem wtedy największą zmianę. Korzystając z rozwiązania MiniBlog, rozbudowałem go i rozszerzyłem go do własnych potrzeb. Stworzyłem także wtedy oddzielny blog o przemawianiu. 

Co trzeba było zmienić - zmienne wbudowane

W grudniu 2019 stwierdziłem jednak, że to, co zrobiłem 4 lata temu, jest już niewystarczające. Mój program do wpisania wpisów Windows Live Writer przestał być wspierany. W pierwszej więc kolejność trzeba było ulepszyć możliwość  tworzenia wpisów z poziomu strony internetowej. 

Dlaczego? Przykładowo na blogu o programowaniu mam parę zmiennych wbudowanych do wpisów, które określają, w jakim kolorze powinna być miniaturką. Mam też zmienną, która mówi mi jaki obrazek powinien być na tej miniaturce.

Na blogu o przemawianiu mam, też zmienną określającą który fragment tekstu powinien być pisany wielką literą, a której z małej.

Super sprawa, bo mój blog wygląda oryginalnie dzięki temu i widać, że nie jest to gotowy szablon.

Zmienne te jednak są przechowywane w taki sposób:

<p data-variables="colorkey|B4, metroI|0564_EarTrumpet_kontroluj_wszystkie_d_w_Windows,metroT|EarTrumpet" >[metroTutajobrazekWklej] 

Pomyślałem, że może najwyższy czas by te zmienne znajdowały się w pliku XML, a nie bezpośrednio w zawartości HTML wpisu. Zawartością, którą ty też możesz zobaczyć.

W szablonie do edytowania postów także dodałem odpowiednie pola tekstowe, aby edycja tych zmiennych była dla mnie bardziej wygodna

polatekstowe.PNG

A może baza danych nie pliki XML

Moje wpisy na blogu są przechowywane formacie plików XML. Zawsze mnie gryzło, co by się stało, gdyby przeniósł te wpisy do bazy danych. Ten prosty eksperyment pokazał, że baza danych nie zawsze jest szybsza niż odczytywanie plików z dysków.

Gdy serwer startuje, odczytuje on ponad 700 plików XML i przerabiam je na obiekty klas w C#. W zależności od pewnych zmiennych potem formatuje zawartość HTML wpisów.

Z innych plików XML odczytuje później "Kursy" jakie mam na blogu i wiąże je z obiektami wpisów XML. Oznacza to, że w pętli muszę przejść po kolekcji obiektów wpisów.

Ma to 3-sekundową czkawkę, ale działa.

Natomiast rozwiązanie baz danych, gdy próbuje odczytać z tabelki 700 rekordów i zrobić na nich Inner Joina na tabeli kursy to...czkawka w środowisku lokalnym trwała 10 sekund.

Pliki XML więc zostają

Najważniejsza zmiana - miniaturki 

Mój blog od zawsze miał jeden wielki problem. Miniaturki. 

Jak pomyślisz miniaturka na Facebooku czy Twitterze jest czasem ważniejsza niż sam wpis. 

Byłe tego świadomy już w roku 2015, gdy wprowadzałem ostatnią zmianę. 

To, co decyduje o tym, czy ktoś w coś kliknie to nie tylko tytuł wpisu. To też kolorowy obrazek, który zachęca do obejrzenia zawartości.

Jak taki obrazek umieścić?

mettagi.png

Proste wystarczy w meta-tagach określić link do swojej miniaturki. To wydaje się proste. Jednakże te miniaturki muszą mieć rozmiar 1200 na 630 pikseli inaczej te miniaturki, są ignorowane lub dziwnie formatowane przez Facebooka. Facebook też może stwierdzić, że twój obrazek nie nadaje się i nie wstawi nic.

Rozśmieszyło mnie też, że Twitter chce miniaturki 1200 na 627 pikseli. Z jakiegoś powodu oni chcą mieć o 3 piksele niższy obrazek. Na szczęście miniaturka przeznaczona na Facebooka też działa.

Mój blog o programowaniu korzysta z białych ikon, które są na przezroczystym tle. Jest ich 653. Ręcznie zwiększyłem te obrazki do rozmiarów 1200/630. Co wymagało kilku dni.

Później korzystając z programu ImBatch, stworzyłem mnóstwo ikon z odpowiednim tłem.

To na szczęście było już dużo szybsze

Rezultat jest taki, że teraz gdy będziesz chciał udostępnić mój wpis to, zobaczysz taką miniaturkę:

minitaurka 3.PNG

Miniaturki na Facebook można testować na stronie:

https://developers.facebook.com/tools/debug/

Miniaturki na Twitter możesz testować tutaj:

https://cards-dev.twitter.com/validator

Jeżeli chodzi o blog o przemawianiu. To mam tam 56 wpisów i miniaturek. Postanowiłem skorzystać z szablonu i ręcznie tworzyć każdą miniaturką oddzielnie. Edycja zajmuje mi 5 minut na miniaturkę. Kolejny dzień prac więc musiał zostać na to spędzony.

Jednak efekt mnie powala. Miniaturka wygląda jak strona tytułowa wpisu. 

miniaturki3.PNG

A sam ASP.NET CORE 3.1

O zmianach myślałem wiele razy. Jednak czekałem szczególnie na to by ASP.NET CORE w końcu wyszedł w wersji 3. Dlaczego? Podoba mi się to, że w ASP.NET Core 3.1 mogę określić  w kodzie zasady przekierowań HTTP. Przy każdej migracji adresy mojej strony się zmieniają i ta opcja bardzo ułatwi mi pracę w przyszłości.

Aplikacja działa szybciej i to odczuwam.

Wstrzykiwanie zależność nie istniało w oryginalnym kodzie mojego bloga. Teraz dzięki temu lepiej się w tym kodzie odnajduje.

Widać, że w listopadzie 2015 pisałem ten kod byle szybciej.

A jakie są wady i problemy:

  • ASP.NET Core 3 usunął domyślny dostęp do klasy HttpContext. Twórcy wymyśli by ta klasa teraz, była wstrzykiwana. Problem polegał na tym, że w poprzedni kodzie mojego bloga było dużo statycznych klas, które odwoływały się do tego elementu
  • ASP.NET Core 3 kombinuje coś z serializacją JSON. Z jakiegoś powodu rezygnują z rozwiązania "Json.NET - Newtonsoft"

To tyle:

Jak widzisz dbanie o swojego bloga, wymaga wysiłku i czasu. Gdy pewne narzędzia stają zardzewiała to nie chce się potem ich używać. Dlatego ja postanowiłem zadbać o swoje narzędzia. Do zobaczenia.