Cezary Walenciuk Programowanie

AlphaBoard Tradycyjna tablica nie bardzo się sprawdza z prezentacji OnLine. Jak się domyślasz problemem jest światło, które na tą tablicę niezbyt dobrze pada i słabo to widać na kamerze.

Ktoś wymyślił genialny sposób. Aby pisać po specjalnym szkle, które jest przezroczyste i odpowiednio odwraca napisane wzory dla publiczności.

Pisanie po szklanej tablicy, która świeci Neonem na potrzebę webinarów czy LIVE stream-ów nie jest niczym nowym. Ten wynalazek istnieje od 2015 roku. Fachowo takie urządzenie nazywa się "LightBoard".

SoundNarzędzie NR.20 Staram się używam najlepszych narzędzi do robienia webinarów. StreamYard w połączeniu z OBS daje radę, ale nawet tutaj można coś ulepszyć. Na swoich webinarach programistycznych lubię puszczać dźwięki z Gothica, Warcrafta 3, Windows 98, Diablo 2 oraz Heroes 3.

Pod koniec webinaru lubię także puścić na koniec fajną muzyczkę, która nie ma praw autorskich, żebym nie miał problemu.

Tutaj pojawia się prosty problem.

O ile używając TouchPortal jestem w stanie puszczać krótkie dźwięki pod danych klawiszy to oczywiście jakoś takie dźwięku jest beznadziejna. W końcu idzie on przez mój laptop do mojego mikrofonu.

Trzeba więc programu, który doda do kanału "mikrofonu" bezpośrednie odpowiednie dźwięki.

Taki program oczywiście istnieje i nazywa się SoundPad.

GamePad Wszystko zaczęło się od Świąt Bożego Narodzenia gdzie w końcu mogłem znaleźć trochę wolnego czasu aby sobie pograć. W końcu pomyślałem, że może zagram w sobie "Beyond good and evil". Chciałem w tą grę zagrać od 2003 roku. Kupiłem więc wersje HD na Steam i zainstalowałem pewne MOD-y, aby gra wyglądała ładnie nawet w roku 2021.

Pojawił się jednak pewien problem.

Ta gra na PC nie wspiera żadnych padów na PC. A przynajmniej tak było w tamte święta.

Moim zdaniem nawet gra z 2003 roku powinna obsługiwać pada. Pamiętaj jak grałem w "Prince Of Persia Warrior Within" na padzie, a to jest gra o podobnym sterowaniu i z roku 2004.

Tak zaczął się moje zadanie w poszukiwaniu, jak najtańszego i najlepszego rozwiązania tego problemu. Swoją drogą też zapaliła mi się lampka.

Gdyby mój pad bezprzewodowy XBOX ONE był wystanie ruszać się jak myszka to mógłbym grać : "Heroes 3" czy "Civilization 6" na ekranie swojego telewizora 4K siedząc na kanapie.

Jestem mega fanem bezprzewodowych padów XBOX ONE. Jako kolekcjoner starych konsol kiedyś zaznałem tego co to znaczy utonąć w kablach.

Samo mapowanie pada na myszkę mógło by mieć także swoje zastosowanie biurowe. Jak więc to zrobić i ile mamy opcji. Zacznijmy od najgorszych.

Mediator Ostatnio zrobiłem webinar na temat budowania aplikacji w C# od zera. Skoncentrowałem się na dobrych praktykach oraz na najlepszych paczkach NuGet, które obecnie są w ofercie dla C# i dla .NET. 

MediatR na pewno jest w pierwszej piątce najlepszy paczek Nuget.

MediatR pomaga Ci szybko napisać aplikację przy pomocy wzorca projektowego mediator oraz zastosować CQRS. 

Validate Nasze aplikacje ASP.NET CORE coraz częściej są tylko aplikacją REST. To oczywiście wymaga Walidacji po stronie klienta i po stronie serwera.

Jak taką walidację jak najszybciej zrobić. Może przecież sam napisać takie warunki, ale przy dużej ilości klas, które występują jako parametry mija się to z celem. 

Możesz też skorzystać z atrybutów i oznaczyć reguły do każdej właściwości.

Co, jeśli chcesz oddzielić logikę walidacyjną od samej klasy. Nie zastąpi to oczywiście dodawania adnotacji do encji w Entity Framework. Mówimy tutaj tylko przesyłaniu danych do serwera.

FluentValidation idzie Ci z pomocą. W tym wpisie też zobaczymy jak FluentValidation współpracuje z Swagger UI.

Swagger Programiści codziennie tworzą jakąś aplikację sieciową typu REST. Teraz nastaje pytanie, jak najlepiej zrozumieć jak dane API działa. Do tego mamy dokumentacje, ale jeśli pracujesz w szybkich, zamkniętych projektach to takiej dokumentacji może nie być.

Potem ktoś dziedziczy projekt i nie wie na co on patrzy.

Wypadałoby znać wszystkie metody, klasy typy zwracane, argumenty w danym API. Dołączyć do tego możliwość szybkiego uruchomienia danej metody z przykładami.

RunRada 4 W pod koniec roku 2017 zacząłem ćwiczyć. Proste ćwiczenia rzeczywiście robią różnice, gdy masz siedzący tryb życia. A co z bieganiem ?

Pamiętam jak pierwszy raz na bieżni nie byłem w stanie wytrzymać 5 minut normalnego spaceru. Powoli z tygodnia na dzień zacząłem sobie stawiać wyższe progi i tak odkryłem, że o ile jest to na początku bolesne to jak twoje ciało da Ci te endorfiny to już...aż chce się biegać więcej. 

Zobaczyłem wtedy pierwsze efekt. Zdarzyło mi się gonić autobus lub pociąg i po 40 sekundach być zdyszany. Teraz spokojnie dawałem radę zrobić taki szybki sprint.

NLog Logowanie działania aplikacji. Jak wiedzieć w końcu, gdy coś nie działa. Mój blog jest napisany w C# i działa po ASP.NET CORE. Jak to jednak bywa z napisaną przez siebie aplikacją pojawiają się błędy więc do bloga dodałem mechanizm logowania błędów. W taki sposób znalazłem wiele dziwnych przypadków uszkodzonych wpisów w formacie XML, które rozwalały Parser. Znalazłem też złe zbudowane przez ze mnie lista kursów. 

Poza tym w logach też widziałem jak ktoś próbował się nie raz włamać na bloga o 4 rano.

Logi są potrzebne nawet do taki projektów. W kontekście aplikacji produkcyjnych logi często są ostatnią deską ratunku, aby stwierdzić co nie działa dla pewnego dziwnego przypadku.

Transform W tym  artykule zobaczymy jak zintegrować AutoMapper  z ASP.NET CORE dla .NET 5, chociaż bądźmy szczerzy możesz skorzystać z tej biblioteki w każdym projekcie w C#.

Co to jest AutoMapper i jakie one problemy rozwiązuje ?

Zaczynamy zabawę mój czytelniku

ArchitectureNr 3 Wiesz jak już w Dockerze robi obraz do różnych frameworków i do różnych języków programowania. Jeśli nie to zawsze możesz przeczytać poprzedni wpis.

Docker potrafi zarządzać obrazami i kontenerami, ale dla zaawansowanych aplikacji i dla prawdziwych firm może to być za mało.

Dlatego powstał Kubernetes?

Coraz więcej rzeczy idzie do chmury. W chmurze możesz utworzyć serwer zainstalować na nim system operacyjny jak Windows czy Linux i przy pomocy niego zarządzać zasobami każdej aplikacji 

W chmurze Amazon,Azure, Google także możesz zainstalować Kubernetes, który zrobi to wszystko 1000 razy lepiej. 

HymnNarzędzie NR.18 Jak jeszcze lepiej ulepszyć system operacyjny Windows.

Czy być może programy tobie, które za chwilę to śmieci, które nie będą ci potrzebne?

Zazwyczaj w tym cyklu pokazuje programy, z które moim bardzo zmieniają przepływ mojej pracy.

Tym razem jednak zastanów się czy potrzebujesz takich programów, bo są one w większości przypadków sytuacyjne.

DockerFileNr 2 W tym wpisie stworzymy masę obrazów Docker do różnych środowisk i do różnych języków programowania. Na razie zapomnimy o Kubernetes. Zajmiemy się nim w następnym wpisie.

W poprzednim wpisie utworzyliśmy prosty obraz docker, który zawierał tylko statyczne pliki. Uruchomiliśmy go i tyle.

Oczywiście zabawa z Docker nie kończy się tutaj. Wróćmy do polecenia tworzenia obrazu  :

Flattern W tym wpisie zobaczymy użycie metod SelectMany w LINQ. 

SelectMany w pewnym sensie jest odwrotnością GroupBy. GroupBy bierze jedną kolekcję i transformuje to odpowiednio na kolekcje, w której elementy mają swoje swoją kolekcje.

Natomiast SelectMany spłaszcza takie kolekcje w kolekcji do jednej scalonej listy elementów

Ponownie wyobraź sobie, że mamy kolekcje wpisów na bloga. Tym razem jednak mamy także definicję samego bloga. Będziemy mieć dwa blogi o przemawianiu i o programowaniu.

Group By Jak więc GroupBy w LINQ grupuje dane w C#. Zacznijmy od podstaw, a potem spójrzmy na zaawansowane przykłady. 

Group By pozwala na szybkie grupowanie kolekcji połączony ze sobą danych poprzez określoną właściwość. 

Pogrupowane dane staje się osobną kolekcją, które nie są zazwyczaj typem anonimowy, a interfejsem generycznym IGrouping<K,V>

Do przykładu potrzebujemy jakiegoś modelu. Oto model wpisu na blogu.

9.0 W listopadzie 2020 pojawiły się .NET 5 i C# 9.0 . Z ciekawości Ci powiem, że zdarzyło mi się mieć rozmowy kwalifikacyjne na temat C# 9.0 już tydzień po premierze więc czytanie o nowościach języka nigdy nie wiesz, kiedy może Ci się przydać. 

Zmotywowało mnie to do zrobienia webinaru na ten temat.

Miałem też inną rozmowę, na której dwaj architekci oczekiwali ode mnie napisania "Pattern Matching" z buta.  Trzeba przyznać, że jest to ciekawy problem, ponieważ w firmach pisanie kodu w najnowszych technologiach jest niesamowitym luksusem. Dlatego nie dziw się, jeśli ktoś nie wie co pojawiło się w C# 8.0 albo C# 7.0 ?

C# 9.0 ma nowego? Najważniejsze nowości to rekordy i rozwinięcie możliwości Pattern Matching. Przejdźmy jednak po kolei do każdej nowości języka C#?

ChoiceSerce NR.9 Oglądałeś, kiedy wstęp do filmu "Idiocracy" (Idiokracja). W nim biedni i patologicznie ludzie rozmnażają się na potęgę, a osoby z klasy średniej zastanawiają się 10 razy czy to jest dobry moment na posiadanie dziecka.

Czasem nawet czekają zbyt długo...i nic z tego nie wychodzi.

Istnieje w tym pewny szczypt prawdy.

W końcu biedni ludzie, jakie mają inne rozrywki czy marzenia. Samorealizacja i dążenie do własnych celów to dla niektórych ludzi luksus. 

Gratuluję znalazłeś więc dobrego partnera. Jesteś albo kobietą i mężczyzna i czytasz właśnie ten wpis i poznałeś/poznałaś wspaniałego partnera. 

Jest to tak dobry związek, że można śmiało myśleć o ślubie, mimo iż zapewne na oglądałeś się filmików na YouTube na temat MGTOW, Red Pill, Black Pill oraz feminizmu. Jak to wartości rodzinne przestają istnieć.

Nie ma nikogo przynajmniej w Internecie kto by te wartości przekazywał. Teraz tylko logować się na OnlyFans i mieć wirtualne związki jak usługę, którą można włączyć i wyłączyć.

Możesz się śmiać, ale w Japonii można wynająć sztuczną rodzinę, która poudaje, że jest z Tobą przez dzień.

2020 Jeśli chodzi o podsumowania bloga to ostatnie robiłem w styczniu 2016 roku. Dużo się od tego czasu się zmieniło.

W roku 2020 wróciłem do swojej strony internetowej. Miałem dwuletnią przerwę w tworzeniu wpisu na bloga. Nie ma co ukrywać, ale czasem w życiu są ważniejsze rzeczy.

Statystki Google Analytics pokazują brutalna prawdę faktu, że większość wpisów na tym blogu się zestarzała. Chociaż Kurs C# nadal się trzyma. Ktoś mógłby powiedzieć, że ten blog programistyczny tonie. Tak mogłoby być, gdyby coś z tym nie zrobił.

Do strony wprowadziłem wiele zmian. Oto one:

W roku 2020 zrobiłem migrację bloga z ASP.NET MVC do ASP.NET CORE 3.2. Strona dzięki temu dostała ciekawy algorytm kompresji każdego zapytania HTTP.

Poprawiłem stronę główną, która przez wiele lat wyglądała tak:

HouseZarobki NR.6 Od jakiegoś czasu chciałem napisać ten wpis. Tak kupiłem mieszkanie w maju 2019 roku na Mokotowie w Warszawie. Jak to zrobiłem ? W skrócie to moja dziewczyna szukała przez rok mieszkań w tym regionie i przy okazji pokazała mi fajną ofertę mieszkania. Później szukaliśmy odpowiedzi czy można było kupić mieszkanie taniej i odpowiedź brzmi nie.

O ile były pogłoski, że mieszkania mają stanieć to wraz z rokiem 2020... COVID pokazał coś innego i mieszkania wcale nie staniały w Warszawie. 

Dźwina świadomość się w mojej głowie pojawiła, gdy uświadomiłem sobie, że mój kredyt jest całkiem dobrą pseudo lokatą w czasach, w których zaraz ma być wielka inflacja.

Nigdy nie myślałem o pieniądzach w ten sposób. Kredyt, czyli dług daje mi pieniądze ?

Warto też zaznaczyć, że oprocentowanie kredytu jest teraz przynajmniej bardzo małe. Niby super, tylko jeśli chcesz teraz mieć kredyt to bank w czasach COVID bardzo Ci ten wybór ograniczy tylko to się zmieni miejmy nadzieje, za parę miesięcy.

Dobry moment na zakup mieszkania już BYŁ. Bo twoje oszczędzone pieniądze tracą na wartości, a wszytko inne drożeje. 

W świecie gdzie oprocentowanie lokat wynosi 0.01%. Człowiek naprawdę może się zastanawiać czy warto trzymać pieniądze, czy nie mieć tego wszystkiego w jakieś formie aktywów jak mieszkanie w dobrej okolicy. 

Too long?Aktywny NR.11 Przyszła pora na większe przemyślenie co do produktywności programisty. Pracując zawodowo 9 lat i programując już 13 lat mogę dojść do jednego potężnego wniosku. Na początku w tym cyklu były wpisy jak się nie opierdalać teraz przed chwilą zrobiłem wpis o tym, że może bycie leniem od czasu do czasu to nic straconego.

Kariera zawodowa. Cele finansowe. Fazy i cykle produktywności.

 

Cele duchowe i poszukiwanie radości.

To wszystko na pewno nie jest sprintem, w który musisz jak najszybciej odwalić nadludzki wysiłek, a potem mieć to z głowy jedną sferę życia i spojrzeć na dalszą listę swoich Questów jakby to była gra, w której stany,relacje, nagrody raz zdobyte stają się permanentne.

PreCode Wyświetlanie kodu na bloga. Tak mam na ten temat wiele wpisów. Miesiąc temu postanowiłem stworzyć narzędzie w WPF, które pomoże mi jeszcze bardziej przyspieszyć proces dodawania kodu do wpisów oraz do slajdów na webinary.

Taka aplikacja już istniała i nazywała się "PreCoder". Domyślnie był to plugin do Windows Live Writer. Tak kiedyś tak pisałem wpisy, a teraz to nawet Windows Live Writer nie będzie chciał Ci się zainstalować, ponieważ Microsoft zablokował ci taką możliwość. Odpowiedni Open Source tego programu z tego, co wiem to nie ma takiego pluginu. Jego ostatnia aktualizacja była w roku 2017. 

Sam "PreCoder" można uruchomić jako normalną aplikację WPF. Niestety nie spełniała ona wszystkim moich potrzeb więc potrzebowałem czegoś podobnego, ale rozbudowanego. Będę jednak szczery, że ułatwiłem sobie zdanie i logikę formatowania kodu częściowo skopiowałem właśnie z tego programu. 

W tym wpisie pokaże ci jak utworzyć szybko pomocniczą aplikację w WPF która :

  • Usunie białe znaki 
  • Wyrówna odstępy w kodzie
  • Zrobi kodowanie HTML (HTML Encode) na tekscie
  • Tekst automatycznie zostanie skopiowany do schowka
  • Otoczy tekst tagami <pre> i <code> jeśli będziemy tego chcieli
  • Doda odpowiednie paragrafy <p> do tekstu, jeśli będziemy tego chcieli
  • Otworzy rezultat naszego działania w notatniku, jeśli będziemy tego chcieli
  • Doda odpowiednią klasę CSS zależności od typu kodu. Jest to ważne dla biblioteki JavaScript Highlight.js, która koloryzuje składnie na tym blogu
  • Doda atrybut, który określi tytuł kodu. Coś co kiedyś stworzyłem na swoim blogu, ale dawno z tego nie korzystałem, ponieważ nie chciało mi się dodawać atrybutu data-codetitle ręcznie.

Aplikacja ma działać tak.

Relax ?Aktywny NR.10 Witaj ponownie w cyklu Aktywny Programista. Ten cykl rozpocząłem od wpisów na temat marnowania czasu, radzenie sobie ze strachem i ważności samej pracy, ponieważ nie ma magicznych pigułek i skrótów.

Przez lata moje podejście do produktywności i ciśnienia 200% ze swojego umysłu bardzo się zmieniło.

...

Dlaczego?

Myślę, że na początku, gdy zaczynasz swoją przygodę nie koniecznie nawet z programowaniem to masz problem z ogólno rozumianym lenistwem. Sam jako student dużo grałem w gry komputerowe i robiłem mnóstwo rzeczy, które nie miały jakiegoś określonego produktywnego celu. 

Gdy przyszło co do czego to nauczyłem się pracować i studiować równocześnie. Miałem nawet okres, w którym pracowałem od 7 rano do 20 przed komputerem. Pisanie wpisów na blogu i czasem nawet się zastanawiam jak to robiłem.

Po co to?Nr 1 W grudniu 2020 roku zrobiłem webinar na temat Kubernetes i Dockera. Postanowiłem zrobić podobny poradnik dla początkującego tylko w formie tekstowej. Poza tym bądźmy szczerzy kopiowanie komend z filmu nie jest ciekawym doświadczeniem.

Technika idzie bardzo szybko. Już w Visual Studio 2019 mając zainstalowany .NET 5 możesz jawnie tworzyć projekty ASP.NET CORE, które domyślnie łączą się z Dockerem i debugować przy jego użyciu aplikację.

Wszystko fajnie pięknie tylko : Co to jest Docker i Co jest Kubernetes ? Do czego to służy  ?

W praktyce jako programista któregoś dnia przychodzi do Ciebie admin i mówi, że od tej pory robimy aplikacje w Kubernetes i każe Ci zrobić konfigurację w taki sposób, aby Kubernetes to widział.

PowerNarzędzie NR.17 W Windows 10 brakuje dużo pomocniczych programów i funkcji. To samo pomyślał zespół Windows Teams i stworzył ten program. 

Program cały czas się rozwija i pomocnicze narzędzia dochodzą.

Z wersją 0.28.0 ten program posiada :

  • Selektor kolorów pod skrótem klawiszowym
  • Strefy przypinania okień : FancyZones
  • Dodanie poglądów plików : SVG, Markdown do Eksploratora plików
  • Pomocnicze narzędzie pod meni, które zmienia rozmiar obrazków masowo
  • Zmapowanie klawiszy na inne klawisze
  • Pomocnicze narzędzie pod meni, które zmienia masowo nazwy plików
  • Uruchomienie pomocniczego pola tekstowego, w którym wpisujesz jaki program chcesz uruchomić lub jaki plik chcesz znaleźć
  • Przewodnik po skrótach pod klawiszem Windows
  • Dodanie kamery wirtualnej, która ma wbudowany efekt tła oraz działa pod twoje skróty klawiszowe

Wiele lat temu dla Windows 95 istniał program PowerToys, dlaczego go nie mieć w Windows 10 i warto zaznaczyć, że jest on OpenSource

Alias Hej tu krótki wpis, który powie dwa zdania na temat tworzenia aliasów do Kubernetes. Gdy korzystasz z Kubernetes to cały czas w wierszy poleceń musisz pisać "kubectl".

Dla mnie to nieintuicyjna nazwa.

Zamiast wpisywać "kubectl" do wiersza poleceń nie fajnie by było wpisać po prostu "k".

FactoryWzór.15 Cześć witaj ponownie we wpisie na temat wzorów projektowych. Oprócz opisywania znanych wzorców projektowych chce także dać swoje 5 groszy i wyjaśnić, że nawet książkowe wzorce projektowe we współczesnym świecie mają lepsze alternatywy.

Dziś spojrzymy na wzorzec projektowy Fabryki.

Po co na fabryka, która ma wypluwać określone instancję obiektów.

Spójrz na ten przykład.

Publish W .NET 5, który jest następną wersją .NET CORE, a nie tego .NET, który działa tylko na Windows. W .NET 5 można utworzyć aplikację WPF i Win Forms tylko działają one nadal tylko na systemy Windows.

Jak na razie .NET nie ma dobrej odpowiedzi na tworzenie aplikacji desktopowych wszędzie. Być może za rok MAUI rozwiąże ten problem.

Na razie WPF i Windows Forms nadal żyją, mimo iż kwestionować te framework można było z tych samym powód w 2010 roku. Mając rok 2021, aż strach pomyśleć, że nic nie zmieniło się w tej kwestii od 11 lat.

Aplikację WPF i Windows Form nadal są używane w firmach. Dodatkowo ktoś na webinarze zwrócił mi uwagę, że istnieje gra na Steamie, która została napisana w WPF.

Ja miesiąc temu napisałem prostą aplikację WPF do formatowania kodu, która bardzo skraca mi czas pracy do tworzenia slajdów bądź wpisów na blogu. 

Powstało jednak jedno dobre pytanie. Jak taką aplikację publikować jako przenośny plik ".exe", który zadziała na każdym systemie Windows bezwzględu na to, czy .NET 5 jest zainstalowany, czy nie.

OBSNarzędzie NR.16 W roku 2020 zrobiłem 16 webinarów i 3 prelekcje online oraz 3 prelekcję musiałem nagrać. Nie zrobiłbym tego bez programu OBS Studio. O ile StreamYard ma gotowy podział na udostępniony ekran oraz na twoją kamerę to moim zdaniem warto mieć nad tym większą kontrolę.

Samo zrozumienie wszystkich przydatnych funkcji, pluginów programu zajęło mi 2 dni. Dla Ciebie zrobiłem szybki skrót, aby korzystać z tego programu.

Sam program jest darmowy więc nie musisz nikomu płacić za te opcję.

Machine?Nr.4 W tym wpisie opowiem o "Awaitables". Jeżeli pracujesz z "async i await" prawdopodobnie słyszałeś te wyrażenie nie jeden raz.  Tylko nie miałeś czasu wniknąć czym ten "Awaitable" jest.

Awaitable reprezentuje typ, na który możemy czekać i wykonać operację przy pomocy słowa kluczowego "await".

 

Task i Task<T> są tymi typami "awaitable".

SynchroNr.3 Pora wejść głębiej w to, jak async i await działa. Po oczywiście pisanie teraz kodu jest łatwiejsze, ale wciąż nie unikniesz problemu z synchronizacją działania w naszej aplikacji. 

To jest jedno z tych zagadnienia, co w ogóle robi : ConfigureAwait i dlaczego Visual Studio czasem mi sugeruje, bym ustawił to na false.

Co może być przerażające, gdy zdaje sobie sprawę, że ten mechanizm działa inaczej w zależności od tego, czym nasza aplikacja jest.

Czy jest to konsola? Czy jest to aplikacja WPF, Windows Forms?

Czy jest to aplikacja Web, czyli ASP.NET Core? Czy jest to aplikacja na telefon?

Stickyposition : sticky. Jest miksem pomiędzy ustawieniem fixed i relative. Element jest traktowany jako fixed, dopóki pewna wartość wysokości strony nie zostanie przekroczona. Element wychodzi poza ekran i już staje się niewidoczny. Gdy element jest na ekranie to trzyma się on Ciebie jak naklejka do czasu przekroczenia pewnej wysokości.

Jesteś ciekawych efektów Woo w CSS. Ja postanowiłem zrobić krótką rewizję fajnych efektów CSS. Tak jak kiedyś to robiłem.

Na tej stronie masz prosty przykład jak możesz wykorzystać właściwość "position : sticky" w połączeniu z negatywnymi marginesami i obrazkami reprezentującymi dwie warstwy.

Historia Pamiętam jak przeglądałem po raz pierwszy internet.

Strony internetowe wyglądały bardzo prymitywne i nawet śmiesznie.

 

  • Zły kontrast
  • Masa gifów
  • Źle powtarzające się tło...nie...Oczojebne tło.
  • Napisy w stylu WordArt
  • Migające napisy
  • Lista gości
  • Muzyka w formacie MIDI
  • ClipArt
  • Tabelki HTML
  • Obrazki "Under Construction"
  • Animowane napisy 3D.

Pamiętam jak kupiłem czasopismo "Komputer świat/Click!" i czytając ich poradniki dla zaawansowanych i próbowałem swoich pierwszych kroków w HTML. 

Te porady jednak tworzyły czasem takie strony. Pamiętaj Onet dawał możliwość tworzenia blogów za darmo więc każdy mógł zrobić "beznadziejną" stronę na temat "Dragon Ball" czy swojego ulubionego zespołu "Spice Girls"

calc() Czy wiedziałeś, że w CSS możesz wykonywać kalkulacje matematyczne?

Tworzenie stron internetowych nigdy nie było, aż tak łatwe. Pomyśleć, że kiedyś CSS nie miało żadnych funkcji teraz ich masz bardzo dużo i jednym problemem jest wsparcie przez przeglądarki.

Dobra wiadomość jednak jest taka, że wraz ze śmiercią Internet Explorer i pojawieniem się przeglądarki EGDE - CSS przeżywa najszybszy rozwój niż kiedykolwiek.

W tym wpisie omówimy w dokładnych szczegółach jak tą funkcje LICZENIA wykorzystać.

Marketing Czy samo bycie programistą to za mało? W końcu powstaje pytanie "jak się wyróżnić" na tle innych programistów. W 2011 roku ten blog właśnie blog kiedyś otworzył mi drzwi do kariery...i miałem gadkę, że może nie mam doświadczenia, to jestem ambitny, pracowity i tak dalej.

Na podstawie tego doświadczenia mógłbym Ci powiedzieć. Chłopie załóż bloga. Nawet tak robiłem. Mam wpisy z roku 2016 gdzie głosiłem takie kazanie.

Ja w tamtym czasie też czytałem artykuły o tym, jak stworzyć sobie IMAGE ROCKSTAR developer coś tam, aby dostawać pracę na pstryknięcie palca. Wystarcz, że założysz bloga.

Tylko w roku 2020 nikt nie czyta już blogów. Spójrzmy prawdzie oczy prawdopodobnie 50% czasu twojego w internecie to social media. A kolejne 50% procent to YouTube, który jest współczesną telewizją.

Firmy HeadHuneterskie jak BulldogJob czy JustJoinIT robią takie dobre wpisy marketingowe/programistyczne, że ja się zastanawiam czy w ogóle już coś pisać. Bo jako programista w wyszukiwarce Google jak nie tylko walczę z każdym innym programistą, który piszę bloga. Ja walczę też korporacjami, którzy mają cały zespół ludzi do tworzeniu tak zwanego Contentu.

Nie mówiąc o tym problemie, że pisze bloga po polsku. Za granicą natomiast powstał wiele zbiorników blogów programistycznych :

Sprawdzałem, jak moje najnowsze wpisy sobie radzą pod względem SEO i mnie nie dziwi, że kiepsko to wygląda. Ile programistów, firm teraz chce sprzedawać kursy programistyczne i inwestuje w reklamę na Facebooku, LinkedIn. 

A więc sam blog nie wystarczy. 

Czyli moja strategia, którą prowadziłem przez te lata, właściwie mnie już w ogóle nie wyróżnia.

Tak zadałem sobie pytanie "Co mogę z tym zrobić". Zadałem sobie też pytanie "Co z tego?"

W końcu nie chce sprzedawać kursów. Od 2011 roku zawsze chodziło o to, aby być zapraszany jako prelegent i mieć fajny bajer, gdy będę szukał pracy. Nie jestem trenerem. Nie mam kursu na sprzedaż. 

Mimo wszystko gryzło mnie to. Bo jak nie wiadomo, o co chodzi, to chodzi o EGO.

Bo co wiele lat pracy ma pójść do kosza. Mam poprostu poddać się. Jako to jest z tym marketingiem programisty?

Pora odświeżyć swoje kanały Social Media.

Mistakes Słuchaj, nie musisz, być specjalista czy grafikiem, aby znać CSS. Jeżeli określasz się jako FullStack, to znaczy, że znasz także CSS. Pytanie jednak brzmi czy pomimo tego, że znasz CSS, to wiesz, jaki błędów warto unikać.

CSS nie jest intuicyjny. Ma pewne ukryte zasady, które odkryjesz, dopiero gdy zobaczysz, że coś nie działa. 

Praca z samym CSS może być mimo wszystko przyjemna, ale aby tak było na pewno trzeba unikać pewnych błędów.

Oto 11 z nich.

vm Ostatnio robię poprawki na blogu. Przyglądam się temu, jak pisałem kiedyś CSS. Widzę, że dla pewnych nagłówków tekstowych napisałem tyle "@media Queries", aby tekst zawsze dopasowywał się do wielkości ekranu. Oczywiście tak nie powinno się robić. W sumie to rozwiązanie zakłada pewną ilość znaków tekście.  

Spójrz. Czy to dobrze wygląda?

UnBlock Istnieje wiele stron internetowych, które blokują możliwość prawego kliknięcia czy zaznaczenia tekstu. Można się domyślić, że jest to jakieś prymitywne zabezpieczenie przed kopiowaniem obrazków czy tekstu.

Oczywiście zawsze możesz, pobrać zawartość strony korzystając z F12 i DevTools. 

W tym krótki wpisie pokaże ci krótki spis narzędzi, który tę blokadę usuwa.

jQuery Bootstrap. Pomocniczy framework CSS do budowania stron. Pracuje on nad swoją 5 wersją. Wypuścił on całkiem niedawno swoją najnowszą wersję alpha. 

Jego najnowszy bajer polega na tym, że nie jest on już zależny od jQuery. To zadaje poważne pytanie. jQuery był pierwszy wspaniałym frameworkiem JavaScript, który przez lata ułatwiał budowanie stron internetowych. Jednakże nic nie trwa wiecznie. W programowaniu ciężko znaleźć rozwiązanie, które potrafi przetrwać 10 lat lub więcej.

Pytanie, czy dziś i w przyszłości potrzebujemy jQuery do budowania stron internetowych

SymbolNr.4Pogadajmy o symbolach, które są od ES6. Nie było ich wcześniej w tym języku programowania. Co pierwszy raz o nich słyszysz.  Nie ma problemu. Po to jest w końcu ten szybki trening JavaScript. Symbol spełnia parę zadań w JavaScript.

Jednym z nich jest wygenerowanie unikatowego identyfikatora. 

Sztuczna polega na tym, że TY nigdy nie wiemy, jak dokładnie wygląda ten identyfikator i nie masz do niego dostępu. 

Nie masz żadnej możliwości inspekcji, aby zobaczyć, czym ten identyfikator jest. Wiem, że będzie on unikatowy. Utwórzmy, więc ten symbol korzystając z funkcji symbol.

Jak widzisz, aby go utworzyć, muszę podać jakiś napis. Ten napis jest użyty tylko do celów debugowania.

Co się teraz stanie? Utworzy się nowy symbol z unikatowym ID w silniku JavaScript i przypiszemy ten identyfikator do naszej zmiennej.

Sprawdźmy jakiego typu jest nasz symbol.

ModuleNr.2 W tym wpisie zobaczymy jak moduły i klasy działają w JavaScript. Wiem, co sobie myślisz "przecież ja o tym wiem", ale czy tak rzeczywiście jest. Nie zaszkodzi zrobić szybką powtórkę i odświeżyć wiedzę. 

Jeśli zaczynasz swoją przygodę z JavaScript, to ten wpis jeszcze bardziej Ci się przyda. O ile wcześniej do testowania kodu JavaScript wystarczyła sama konsola przeglądarki. Tym razem będę potrzebował prymitywny projekt.  

Utworzyłem w Visual Studio Code 3 pliki index.html, main.js i module-first.js.

SłownikiNr.3 Czy wiesz, że tablica nie jest jedyną kolekcją w JavaScript. Poza tym sama tablica oferuje dużo metod pomocniczych i nie musisz pisać swoich.

Dzisiaj spojrzymy na to wszystko. W końcu to trening JavaScript.

Wraz specyfikacja EcmaScript 6 i dalej pojawiło się mnóstwo dodatkowych funkcji dla tablic. Zacznijmy od problemu, który możesz przypadkiem popełnić. Tworzymy niby tablice i umieszczamy w niej wartość 200.000. Programista może założyć, że jest to wartość, która idzie do tablicy. Co jednak pojawi się w konsoli.

HistoriaNr.2 W tym wpisie zobaczmy ewolucję kodu .NET, jeżeli chodzi o asynchroniczność. Dlaczego? Warto być świadomym tego, dlaczego async i await jest taki wygodny w użyciu, zwłaszcza gdy zobaczysz dawne rozwiązania.

W poprzednim wpisie omówiliśmy terminologię oraz zrobiliśmy krótki wstęp na temat tego, jak  wątek i procesor działa. 

Teraz pora na przygodę po kodzie .NET w C#.

TerminologiaNr.1 Znasz definicję i terminologię powiązane ze współbieżnością. Nie wiesz, jak to działa w procesorze? Spoko o to wpis dla Ciebie. 

Współbieżność jest przydatna w każdej aplikacji. Nie ważne czy pracujesz w aplikacjach desktopowych, czy w aplikacjach mobilnych. Mamy rok 202X i obecnie wielowątkowość stała się wymaganiem. 

Z obecnymi komputerami użytkowników i serwerów istniejmy w punkcie, w którym programowanie asynchroniczne jest zalecane. Całkiem nie dawno zrobiłem prezentację na żywo o tej tematyce. Jak się okazało, był to mój najlepszy i najbardziej popularny LIVE. Dlaczego? O ile istnieje tona artykułów o podstawach i zaawansowanych funkcjach danego języka programowania. To widać wyraźnie, że nie ma dużo informacji o wielowątkowości w C#.

Uzupełnijmy więc tę lukę. W tym wpisie omówimy w pigułce, o co chodzi z tą wielowątkowością.

gitignoreTrik. 4 W tym wpisie omówimy działa pliku ".gitignore". W tym pliku określasz jakie pliki mają być ignorowane przez repozytorium git.

O ile w samym Git ignorowanie plików przez repozytorium to fajny bajer. To ignorowanie plików na potrzeb umieszczenia później ich gdzieś w chmurze np. w GitHub jest esencją każdego projektu. Nie chciałbyś, aby dane poufne jak hasła wyciekły do GitHub-a albo żyły w historii repozytorium.

Istnieje przypadek utraty przez osobę wszystkich bit coin-ów, bo wrzucił do Github-a przez przypadek swoje hasło do konta.

Nie ma co się bać tego pliku ".gitignore". Jest on naprawdę prosty w obsłudze.

Vim?Trik. 3 W tym wpisie pokaże ci jak zamienić Vim w git na moim zdaniem lepsze narzędzia. Kojarzysz Vim? To ten program, z którego programiści nie umiał wyjść. Kojarzysz memy, aby wyjść z Vim-a, trzeba wyłączyć komputer. Domyślne narzędzia Git są podpięte po ten edytor, ale ty możesz to zmienić.

Vim faktycznie nie jest to przyjaznym programem dla początkujących. Dlaczego więc go nie zastąpić?

Restore?Trik. 2 Zrobiłeś więc zmiany do swojego repozytorium Git. Jak je jednak cofnąć. W tym wpisie zobaczmy trzy polecenia: reset, restore i revert.

Ich nazwa sugeruje, że każde z nich może służyć do cofanie swoich zmian. Jak jest jednak naprawdę. Zobaczmy.

git add -iTrik. 1 W tym wpisie pokaże ci jak, możesz decydować o tym, co wejdzie do danego commita, a co nie. Same polecenia Git to potężne narzędzia i tak może to wszystko zrobić w konsoli.

Dlaczego chciałbyś rozbijać swoje zmiany na pojedyncze commity? Otóż duże commity, które zawierają wiele zmian, są antywzorcem. Gdybyś chciał cofnąć konkretną zmianę, która siedzi częściowo w jednym commicie, to możesz sobie wyobrazić, ile problemów to stworzy.

Dlatego warto robić jeden commit to jednej konkretnej wspólnej zmiany. Zobaczmy, jak to możesz zrobić w konsoli i przy użyciu Git.

W swoim repozytorium Git mam taki plik XML. Nazywa się on system.xml

MailChimp W tym wpisie pokaże Ci co zrobiłem aby stworzyć swój własny newsletter na mojego bloga. Wybrałem MailChimp, ale wiesz mi próbowałem różnych rozwiązań, aby wybrać właśnie ten. Ten blog działa na ASP.NET Core 3.2 więc zobaczmy jak MailChimp API działa w C#?

Teraz każdy szanowany programista ma swój newsletter. No cóż, trzeba iść z duchem czasu, bo jeżeli chodzi o marketing programisty blog to zdecydowanie za mało. Jestem nawet świadomy, że newsletter to coś co powinien mieć jakieś 4 lata temu na moim blogu. 

Chociaż też warto zadać sobie pytanie po co Ci jest newsletter. Ma to sens, jeśli chcesz informować danego klienta o kampanii swojego produktu/kursu. 

Powiedzmy, że ktoś jest zainteresowany Twoim kursem programowania i poprzez newsletter nakręcasz go na zakup lu rozwiewasz jego wątpliwości.

Być może chcesz zaprosić paru użytkowników na cykl e-mail, w których zdradzasz jakiś sekret.

Dlatego o tym piszę? Słuchaj w roku 2020 (i później) zwykły newsletter o tym "co nowego na moim blogu" powoli nie wystarcza i warto się zastanowić po co Ci jest newsletter.  Istnieje nawet szansa, że informowanie swoich fanów o tym "co nowego na twoim blogu:" będzie skuteczniejsze w media społecznościowych niż poprzez newsletter.

Nie powiem, że zacząłem widzieć, że każdy blog programistyczny ma newsletter, ale posiadanie newsletter dla samego posiadania trochę mija się z celem.

CarnacNarzędzie NR.15 Ostatnio co wtorek robię Webinar i zadałem sobie jedno proste pytanie. Co mogę zrobić, aby moim widzowie wiedzieli, co wpisuje w swojej klawiaturze.

Czy jest jakiś sposób na wyświetlanie klawiszy na monitorze w dynamiczny sposób?

O ile są specjalne pluginy do OBS. To ustawienie ich jest bardzo kłopotliwe. Na szczęście istnieje do tego odpowiedni program. 

A tym programem jest: carnac for the hotkey visualization

TerminalNarzędzie NR.13 Microsoft słucha i wie, że wiele programistów chce lepszego terminala do systemu Windows. Jak np. korzystałem jak do tej pory z Cmder, który jak pisałem dawno temu był i być może nadal jest wierszem poleceń naszych marzeń.

Pomyśl ile rzeczy robimy dziś w wierszu poleceń. Git, AngularCLR, NPM, a nawet jak pamiętasz są polecenia dla środowiska .NET. 

 

Wiersz poleceń będą zawsze potrzebne i można nawet powiedzieć, że bum na proste aplikację programistyczne z interfejsem się skończył jakieś 5 lat temu. Teraz klep polecenia w wierszu poleceń.

Microsoft wysłucha modlitwy i postanowił wypuścić nowy terminal. Zobaczmy jak możesz go przystosować do pracy.

TreningNr.1 Przyznaj się, na ile znasz JavaScript? Wiele programistów jest niedzielnymi programistami JavaScript. Coś trzeba było zrobić? Nie ma problemu. Metodą prób i błędów i przy pomocy Googli napiszę wystarczający działający kod JavaScript.

Nie ma w tym nic wstydliwego, że język JavaScript nie jest twoją główną smykałką. Dziś w roku 202X jednak trzeba coś z tym zrobić. 

Pomyśl też o tych sytuacjach, gdy szukasz prostych rozwiązania pod czysty JavaScript, a wyskakują Ci rozwiązania pod jQuery.

UnitTestCzęść NR.9 W tym wpisie zrobimy porównanie frameworków testów jednostkowych, jakie oferuje Visual Studio w swoich szablonach. Ja korzystałem z XUnit w projekcie TDD, ale Ty być może masz innego faworyta. 

Prawda jest taka, że różnica pomiędzy tymi frameworkami jest niewielka. Chodzi w końcu o oznaczanie, co jest testem, a co nie i każdy framework ma na to swój sposób.

Czasami nie wszystkie technologie wspierają najnowszy .NET Framework, ale w momencie tworzenia tego wpisu nie widzę problemu z .NET CORE 3.2.

Kiedyś też nie każdy framework można było uruchomić w Visual Studio bez dodatkowych rozszerzeń. Teraz to nie jest problem.

AntyPatternCzęść NR.8 W tym wpisie omówimy antywzorce TDD oraz jego ograniczenia.

Pokazałem ci przykład pracy w metodyce TDD, używając ASP.NET CORE i Entity Framework. Pokazałem Ci jak z AutoFixture, możesz zautomatyzować pewne czynności w testach. Jeśli czytałeś poprzednie wpisy, to wiesz, jak ważne jest wstrzykiwanie zależności i rozbijanie kodu na interfejsy.

Na początku szybko omówiłem Ci zasadę RED-GREEN-REFACTOR. Chciałem, abyś jak najszybciej mógł wskoczyć w TDD, bez długiego nawijania, o co chodzi. Dziś omówimy, jednak to, co powinno być omówione na samym początku, czyli JAK dobrze pisać testy jednostkowe.

Zapraszam :)

AutoFixtureCzęść NR.7 Jeżeli kiedykolwiek pracowałeś nad dużym projektem, używając TDD, to wiesz jak bardzo ważne, jest pokrycie testów.  Pisanie tych testów wymaga czasu i wysiłku. Będziesz często pracował z bardzo złożonymi instancjami klas. Ich utworzenie może zajmować 80 linijek kodu lub więcej. Zanim więc napiszesz  warunek testowy,  już musisz dużo napisać.

Uzupełnianie obiektów bzdurnymi danymi może zajmować więcej czasu niż MOKOWANIE metody do testowania kodu. 

Zresztą patrz na ten kod, który napisałem, gdy robiłem projekt w stylu TDD.

IActionResultCzęść NR.6 W tym wpisie pokaże Ci jak sprawdzać i testować zawartość IActionResult. Sprawdzimy widoki, do których nawigujemy i sprawdzimy też, czy zwracamy odpowiedni model w IActionResult.

W poprzednim wpisie zrobiliśmy dwa testy do kontrolera i próbowaliśmy postawić nasz projekt ASP.NET CORE (na razie bez sukcesu, bo nie mamy bazy SQL Server). 

Do skończenia tego przykładowego projektu TDD zostało nam jeszcze parę testów.

A dokładnie dwa. Oto wymagania, które nam zostały:

  • Chcemy zwrócić model błędu, gdy gra nie jest dostępna już do zakupu.
    • Użytkownik później ten model zobaczy na stronie HTML.
  • Chcemy sprawdzić, czy nasz kontroler zwraca poprawny IActionResult w metodzie BuyGame.
    • Jeżeli zakup wykonał się poprawnie, to chcemy odesłać użytkownika do odpowiedniej strony. Gdy zakup się, nie udał, to chcemy go przekierować do strony z błędem.

Chcielibyśmy, aby działanie naszego kontrolera wyglądał tak. Jak widzisz tłumaczymy model na request na samym początku. Potem wysyłamy zapytanie do procesora i robimy przekierowanie na odpowiednią stronę w zależności od tego, czy udało nam się kupić grę.

Co więcej, gdy nam się nie udało kupić gry, powinniśmy otrzymać model z błędem, który później zostanie obsłużony w widoku.

ControllerCzęść NR.5 Kiedy budujesz aplikację z interfejsem użytkownika, możesz wyraźnie odseparować definicję czystego interfejsu np. HTML od logiki takiego interfejsu np. JavaScript.

Logika interfejsu użytkownika definiuje na przykład, co się stanie, gdy użytkownik kliknie przycisk

Moje doświadczenie programistyczne, które ma już 9 lat mówi mi, że w TDD najlepiej się testuje logikę interfejsu użytkownika. Co prawda możesz napisać testy przy użyciu Selenium i testować czy odpowiedni DIV w HTML jest w odpowiednim kolorze, ale taki poziom testów błaga też o pytanie ich sensu. 

Najlepiej testuje się logikę. Co więcej, warto zaznaczyć, że logikę można testować tylko wtedy gdy mamy jasny podział pomiędzy logiką a definicją interfejsu użytkownika.

MemoryCzęść NR.4 Jak testować warstwę dostępu do danych. Czy już na tym etapie jest na potrzebna baza danych? Oczywiście, że nie? Czy musimy tworzyć jakieś statyczne listy, które taką bazę mają symulować? Nie

Wystarcz skorzystać z frameworka Entity Framework, który pozwala na utworzenie bazy testowej w twojej pamięci RAM. Gdy będziesz na produkcji wtedy podłączysz się do prawdziwej bazy z prawidzywmi danymi. Zrobimy to w projekcie ASP.NET CORE.

Jakie mamy wymagania w warstwie dostępu do danych:

  • Chcemy zwracać wszystkie gry dostępne w bazie
  • Chcemy mieć metodę "IsGameAvailable" do sprawdzania czy dana gra jest dostępna do zakupu
  • Chcemy sprawdzić czy zapisujemy zakup/zamówienie do naszego źródła danych, gdy zrobimy metodę Save
  • Chcemy mieć możliwość wyświetlenia wszystkich zamówień/zakupów zaczynając od najstarszych zamówień.

Zanim przejdziemy do następnego przykładu zróbmy porządek w naszym projekcie.

TheoryCzęść NR.3 Pora pisać kolejne testy by pokazać jak nasza aplikacja się rozrasta. Dziś przetestujemy i napiszemy wymóg sprawdzenie dostępności gry przed jej zakupem.

Mam już test i kod do metody zapisu w naszym repozytorium do zakupów gier. Dla następnego przypadku będziemy musieli stworzyć nowe repozytorium z metodą IsGameAvailable.

Pomyślmy też co powinno się stać w każdym przypadku. Jeżeli gra nie jest dostępna lub nie istnieje to oczywiście nie możemy jej kupić. Jeżeli gra jest dostępna wtedy wykonujemy polecenie zapisu naszego zakupu.

Oto diagram, który pokazuje przepływ takiej aplikacji.

MoqCzęść NR.2 Wcześniej pokazałem Tobie jak przebiega praca programisty z TDD. Dziś będziemy rozbijać klasy na pojedyncze cegiełki, bo inaczej nie można tego testować, gdy wiele klas. Na razie wszystko wygląda w porządku, bo mamy jedną klasę. Sprawy jednak się skomplikują, gdy będziesz miał więcej klas i zależności pomiędzy nimi. Zobaczymy jak to możemy ugryźć

W poprzednim wpisie stworzyliśmy klasę GameBuyingRequestProcessor, która zajmuje się przyjęciem zakupionej gry. Spełniliśmy już do niej następujące wymagania .

TDDCzęść NR.1 Czym jest TDD? Czyli Test Driven Development. Jest to styl tworzenie programowania, który polega na tym, że zanim napiszesz kod, to najpierw piszesz do niego testy jednostkowe.

Zanim zaczniesz pisać kodu czy to z TDD, czy bez masz na pewno już pewne stwierdzone wymagania do napisania kodu. 

 

Z TDD bierzesz te pojedyncze wymagania i zanim napiszesz swój pierwszy kod piszesz TEST, który sprawdza dane wymaganie.

Wymaganiem może być funkcja, która zwróci określony obiekt z określonymi polami. W teście byś sprawdził, czy te pola są zwracane dla poprawnego zapytania.

Piszesz test jako pierwszy i wiadomo, że bez poprawnego kodu ten test będzie dawał wynik czerwony. Tak ma być, ponieważ logikę napiszesz potem. Test ma pokazać i pilnować Cię i innych programistów o poprawne działanie danej funkcji i jego danego wymagania.

OrderCzęść NR.11 Czy wiesz, że mam na tym blog kurs Funkcyjnego programowania w C#. Dawno go nie odświeżałem, a wraz z pojawieniem się C# 9.0 myślę, że warto robi wpisy, które potrafią przełożyć filozofię funkcyjnego programowania na C#.  A sam C# tak jak przewidziałem na początku tego kursu będzie się zbliżał do trendów funkcyjnego programowania i brał pomysły z F#.

Dzisiaj po wielkim powrocie omówimy Funkcje wyższego rzędu (Higher-order function). Jak wpiszesz "funkcje wyższego rzędu" do Google to zgłoszą Ci języki jak : Python, JavaScript. A jak to ma wyglądać w C#.

Funkcje wyższego rzędu są filarem funkcyjnego programowania.  Są to funkcje, które biorą albo inne funkcje jako parametry, albo zwracają nowe funkcję, które mogą być tworzone dynamicznie.

Template1 Zawsze chciałem zrobić serię wpisów o Angularze i ASP.NET. W tym wpisie zobaczymy podstawowy szablon z Visual Studio, który ma łączyć świat Angular i ASP.NET CORE. Chociaż w tym wpisie będzie używał nazwy ASP.NET, ponieważ już niedługo słowo CORE nie będzie miało znaczenia wraz z pojawieniem się .NET 5.0, który scali środowiska. Jednak może zostajemy przy ASP.NET CORE. Słowa kluczowe w SEO to mój problem.

Tutaj też pojawia się moja obawa.

Taki wpis wymaga ode mnie pracy, a nigdy nie wiesz, kiedy coś się zmieni. Przynajmniej z tego, co widzę szablon Angulara z 2017 i z 2020 nie wiele się różnią poza tym, że szablon z 2020 roku został odchudzony.

To daje mi nadzieje, że jak czytasz to z przyszłości to ten wpis będzie użyteczny.

Świat ASP.NET się zmienia dosyć szybko, ale dobra wiadomość jest taka, że styl MVC wciąż w nim jest od 9 lat. Nie musisz się więc martwić, że ta wiedza pójdzie do kosza. 

Co do Angulara? Zrobiłem oddzielny wpis na temat jego historii (https://cezarywalenciuk.pl/blog/programing/co-to-jest-angular-historia-do-2020), ponieważ byłem ciekaw czy on ma gwałtowne zmiany w swoim kodzie. Odpowiedź brzmi : nie jest tak źle. Największa zmiana dotyczyła paczki @http, a tak pojawiają się tylko usprawnienia.

Mamy więc stronę serwerową : ASP.NET i mam także stronę kliencką Angular. Sprawdzimy podstawowy szablon z Visual Studio i hej może już programowałeś w tych technologiach wcześniej i chciałbyś zobaczyć co się zmieniło. 

Oto tematy w tym wpisie:

  • Co jest w tym szablonie
  • Jak wygląda back-end .NET CORE
  • Angular, czyli jak wygląda front-end

Najpierw stwórzmy ten szablon. Wybieramy projekt : ASP.NET Core Web Application.

Tree Co prawda kiedyś dawno temu (w 2011 roku) zrobiłem wpis z implementacją drzewa binarnego. Znając jednak siebie z 2011 roku nie zaszkodzi zrobić takie szybkie przypomnieje i użyć wzorca iterator.

Zaczynamy od tworzenia gałęzi i liści drzewa binarnego. Każda gałąź ma wartość  i może, ale nie musi mieć następne gałęzi.

W konstruktorze przekazuje dalsze instancje tej samej klasy. Co oznacza, że możemy stworzyć prawdziwy łańcuch łączący te klasy, a raczej drzewo.

Compression Ostatnio zacząłem się zastanawiać co mogę ulepszyć na swoim blogu. Pomyślałem od razu o SEO, czyli o pozycjonowaniu strony. Stworzyłem konto na serwisie skanującym mojego bloga i poza znanymi radami znalazłem fakt, że mój blog nie kompresuje jakichś danych.

Okazuję się, że od jakiegoś czasu przeglądarki wspierają kompresję danych przy każdym zapytaniu HTTP. Przeglądarki wysyłają pytanie do serwera czy dane mogą być skompresowane. Ty to przechwytujesz i wysyłasz spakowane dane.

Kompresja działa tak dobrze, że możesz obniżyć wielkość przesłanych danych do przeglądarki aż o 70%. 

To jest MEGA CUDOWNA zmiana, która nie tylko pomoże SEO twojej strony, ale także przyspieszy jej działanie dla użytkowników.

By Properties Iterator mówiąc krótko jest to obiekt, który przemieszcza się po strukturze obiektu. Iterator zazwyczaj ma referencję do obecnego obiektu, do którego ma dostęp i posiada także metodę by przejść do następnego elementu.

 Mam także iteracje dwukierunkowe, które pozwalają ci także iść w przeciwną stronę.

W .NET mam już sposób na implementację tego wzorca . Jest nim interfejs IEnumerator<T> . Posiada on następujące metody:

  • Current : referuję się do obecnego obiektu w tej pozycji
  • MoveNext() : pozwala Ci przesunąć się do elementu następnego w tej kolekcji. Jeżeli operacja się powiodła otrzymujemy wartość true, jeśli nie to false
  • Reset() resetuje do pozycji startowej

MachnineWzór.13 Nasze zachowanie jest sterowane przez nasz stan. Jeżeli nie wyspałeś się dobrze to twoje zachowanie zapewne się zmieni. Jeżeli wypiłeś dużo alkoholu to nie będziesz prowadził samochodu.  Stany więc decydują o tym co możesz i czego nie możesz zrobić.

Możesz oczywiście przejść z jednego stanu w drugi. Energetyk/Kawa może być takim wyzwalaczem, który zmienia twój stan.  Poranne ćwiczenia mogę Cię też bardziej rozbudzić.

Wzorzec projektowy State jest bardzo prosty. Stan kontroluje zachowania, a sam stan może zostać zmieniony.  Jak jednak ten stan zobrazować. Możemy to zrobić na dwa sposoby:

  • Stany są klasami z zachowaniami i te zachowania powodują zmianę z jednego stanu na drugi
  • Stany i przejścia są typami wyliczeniowymi. Mam specjalny oddzielny komponent, który wykonuje te przemianę stanu.

Oba te rozwiązania są właściwe. Drugi jest najbardziej popularny i kto wie być może już go użyłeś w swojej pracy. Pierwszy wymaga stworzenia wielu klas więc wydaje się on bardziej skomplikowany. Zauważ, że o ile wzorce projektowe mogą wydawać się cool czasami wygrywa rozwiązanie, które jest bardziej przejrzyste niż bardziej złożone. W końcu inni programiści muszą zrozumieć co chciałeś osiągnąć w kodzie

Historia Ciężko jest zrozumieć, co się stało w ostatnich latach w technologii. Co trzeba wiedzieć ,aby zrozumieć Angulara w kontekście obecnych czasów? 

Najpierw musimy się cofnąć o 10 lat, gdy w świecie JavaScript istniały takie biblioteki jak jQuery. W międzyczasie pierwsze frameworki JavaScript jak : Dojo, Backbone.js, Knockout.js walczyły o popularność i adaptacje w firmach.

React i Vue.js oczywiście wtedy nie istniało. 

Historia Angulara zaczyna się od AngularaJS w 2009 roku. Misko Hevery i Adam Abrons pracowali razem nad pewnym projektem pobocznym.

Wszystkie Kategorie