Cezary Walenciuk Programowanie

Dynamic Kolejne wyzwanie Visual Basic For Application dla Excela mnie spotkało. Czy można w Excelu dynamicznie wygenerować arkusze, które są kopią istniejącego arkusza? Oczywiście, że tak.

Czy można nadać nazwę według pewnego wzoru tym arkuszom? Tak

Oto zadanie, które miałem wykonać. Mam więc arkusz do kopiowania wygląda on tak.

Sum O ile ten blog jest głównie na temat C#, to czasem pojawiają się wyzwania, które sprawdzają jak szybko jestem w stanie rozwiązać jakiś problem, gdy o danym języku programowania lub narzędziu nie wiele wiem.

Dzisiaj dostałem takie wyzwanie związane z Excelem. Czy można w Excelu napisać makro w VBA, które za Ciebie wygeneruje wyrażenie "SUMA=" i do niego doklei za Ciebie wszystkie arkusze, jakie masz w danym zeszycie?

Oczywiście, że się da. Po napisaniu Makra w VBA nawet zdałem sobie sprawę, że ten problem można rozwiązać zapewne lepiej przy pomocy menadżera nazw oraz potęgi klawisza SHIFT do zaznaczania wielu arkuszy.

Ja jednak ponieważ jestem programistą to pokaże Ci jak szybko od podstaw  można nauczyć się pisania makr VBA  Excelu, tak jak ja to zrobiłem w 15 minut.

ImageGlassNarzędzie NR.22 Nie podoba Ci się systemowa przeglądarka zdjęć w systemie Windows. Witaj w klubie. Są rzeczy, które mnie denerwują w domyślnej przeglądarce zdjęć jak brak możliwości przejścia do następnego zdjęcia, gdy mam powiększone obecne. 

Brakuje mi też możliwość szybkiego obrotu poziomowego/pionowego zdjęcia oraz możliwości wycinania interesującego mnie fragmentu.

To nie są zaawansowane funkcje, ale nie chce otwierać edytora graficznego ("Paint.NET") , aby zrobić takie podstawowe operacje.

Próbowałem znaleźć program, który by mnie zadowolił.

InfraView to prawie jest to co chce, ale irytują mnie jego ikony, które są potem podpięte do każdego pliku z obrazkiem. Taki mam z nim problem chyba od 2008 roku.

Wiele innych programów odpadło, ponieważ mają one też sporą listę rzeczy, których nie chce mieć w takim programie.

VisitorWzór.25 Drogi czytelniku omówiliśmy prawie wszystkie wzorce projektowe z "Gang of Four". Do skończenia tej kolekcji wpisów pozostało nam omówić ostatni wzorzec projektowy, a jest nim wzorzec projektowy "Visitor".

Jak najlepiej wyjaśnić ten wzorzec?

Najlepiej jest od razu przeskoczyć do przykładu.

Powiedzmy, że mamy następujące wyrażenie matematyczne, które dla ułatwienia składa się tylko z liczb (możliwie ułamkowych) i operatora odejmowania.

Oto przykład takiego wyrażenia : (1.0 - (2.0 - 3.0))

Chcemy teraz zapisać te wyrażenie matematyczne w sposób obiektowy.

InterpreterWzór.24 Celem wzorca "Interpreter" jest zinterpretować dane wyjściowe zazwyczaj w formacie tekstowym, tak abyśmy mogli wykonać specyficzne akcje. Jednakże dane wyjściowymi nie muszą być koniecznie w formacie tekstowym.  

"Interpreter" jest powiązany z kompilatorem. Warto zaznaczyć, że oba pojęcia nie mówią dokładnie o tym samym, chociaż można ich używać zamiennie.  Przypadku języków programowania różnice są takie:

ProxyWzór.23 We wzorcu projektowy "Dekorator" widzieliśmy jak można dodawać kolejne funkcjonalności bez zmiany oryginalnego zachowania. Wzorzec Proxy próbuje osiągnąć to samo tylko gorzej. Warto zaznaczyć, że ten wzorzec nie ma jednej słusznej implementacji. Wiele osób podchodzi do tego wzorca na wiele sposobów. 

Gdyby pada słowo "Proxy" to zazwyczaj mówimy o pośredniku komunikacyjnym między serwerami, które gadają do siebie.

Wzorzec projektowy Proxy też jest takim pośrednikiem między obiektami i jego rola polega na zabezpieczeniu,rozszerzeniu, zmodyfikowaniu jakieś innej funkcji systemu, która jest  pod nim.

W zależności od celu wzorzec ten będzie miał inną implementację. Dlatego nie ma on jednego dobrego podejścia.

Spójrz więc na te różne podejścia do tego wzorca.

PollenFlyweight czy Pyłek jest to tymczasowy komponent, który jest sprytną referencją do czegoś większego.

Ten wzorzec projektowy najczęściej jest używany, gdy masz dużą ilość podobnych do siebie obiektów i chcesz ograniczyć ilość zajmowanej pamięci poprzez wydzielenie powtarzających się wartości do jednego obiektu, do którego wszystkie inne obiekty będą się referować.

Spójrz na poniższy przykład

Façade Wzór.21 Czasami chcemy współpracować z zaawansowanym, skompilowanym systemem w bardzo prosty sposób. Czasami chcemy się zabezpieczyć przed zmianami pochodzących od tego złożonego systemu. W Domain Driven Desing nawet na to się mówi "warstwę anty korupcyjną" (Anti-Corruption Layer). 

My jednak dzisiaj mówimy o wzorcu projektowym "Fasada", który istnieje i będzie istniał zawsze. 

Przykładem fizycznym może być twój dom, który ma skomplikowane połączenia elektryczne, ale ostatecznie Ciebie interesuje fakt, że jak wciśniesz guzik to zapali Ci się światło.

W prawdziwym życiu pisałem wiele fasad do skomplikowanych usług. Czasem rola fasady też polegała na tłumaczeniu jednego API pełnego polskich nazw na fasadę, która zwróci te dane w obiektach i polach po angielsku. Chociaż można się kłócić, że ten ostatni przykład podchodzi pod adapter.

Jaka jest różnica między adapterem a fasadą? Bo na pierwszy rzut oka oba wzorce projektowe wydają się bardzo podobne. Oto moja analogia.

KompozycjaWzór.20 Czym jest ten kompozyt? Dlaczego zalicza się go do wzorców "Structural Patterns"?

Nasze obiekty składają się z innych obiektów. Najłatwiejszym przykładem kompozytu jest klasa, która implementuje interfejs IEnumerable<T> gdzie T jest tym innym obiektem. Czyli najłatwiejszym kompozytem jest klasa, która zachowuje się jak kolekcja innych obiektów?

Nie, jeszcze czegoś tutaj brakuje.

Nie musi to być koniecznie interfejs  IEnumerable<T>  bo w .NET taki interfejsów do budowania kolekcji jest więcej : Collection<T>, List<T>.

Alternatywnie twój kompozyt może mieć właściwość, która wystawia listę innych obiektów. Zazwyczaj tak jest, ale traktowanie kompozytu jako kolekcję też ma swoje zalety.

O co chodzi więc z tym wzorcem? O ile przykład z tworzeniem swojej kolekcji jest prosty i zrozumiały to zapomniałem zaznaczyć bardzo ważną rzecz.

BridgeWzór.19 Programowanie obiektowe tworzy wiele problemów, jeśli nie będziemy się pilnować. Jeden z tych problemów nazywa się "state space explosion" . Ten problem polega  na tym, że liczba encji, czyli klas wręcz może eksplodować, gdy próbujemy opisać każdy możliwy stan danego przedmiotu

Załóżmy, że w swoim programie masz kwadraty i prostokąty, które jeszcze mają inne kolory i inne style ich renderowania.

W takim wypadku ile byś klas stworzył, aby to przestawić.

Istnieje parę wzorców projektowych, które starają się rozwiązać ten problem. Na przykład wzorzec "dekorator". Możesz też do tego problemu podejść jeszcze inaczej i określić, że dana właściwość jak "kolor" kwadratu i prostokąta to po prostu typ wyliczeniowy w tej klasie.

Z drugiej strony, jeśli kolor ma coś więcej niż informację o swoim stanie, czyli nasz kolor musi także zawierać informację o swoim zachowaniu wtedy typ wyliczeniowy nam nie wystarczy. 

Natomiast skończymy wtedy z grupą warunków if-else, które będą wykonywał akcję w zależności od wartości tego typu wyliczeniowego. Zapewne ten kod  także wyląduje w jakieś niezależnej klasy od figur.

Czy można to zrobić lepiej?

AdapterWzór.18 Być może zdarzyło Ci się posiadać ładowarkę do telefonu ze złym wejściem.W takiej sytuacji jesteś zmuszony kupić albo nowy kabel z prawidłowym dla Ciebie wejściem, albo adapter.

Być może jako podróżnik nosisz ze sobą adapter, aby podłączyć urządzenie z  Europejskim wejściem do socketów amerykańskich i brytyjskich. 

Wzorzec projektowy adapter polega na tym, że mamy już jakiś interfejs, ale nie podoba nam  się jego wejścia albo wyjścia więc nakładamy na niego swój adapter, który nam da to, co chcemy.

Tak jak każdy wzorzec i ten ma swój diagram UML

CloneWzór.17 Prototype jest wzorcem, którego zadaniem jest stworzenie swoich kopii do dalszej modyfikacji. Jest to ostatni wzorzec z kategorii "Creational Patterns", który został opisany na tym blogu. 

Prototype może być użyty w każdej klasie. Wystarczy w niej stworzyć metodę, która umożliwi stworzenie dokładnej kopii tego obiektu.

Musisz przyznać, że pomysł na szybkie tworzenie obiektu jest ciekawy. Zamiast tworzyć jakieś Fabryki, Budowniczych, dlaczego po prostu nie klonować istniejących obiektów i tak przyspieszać ich tworzenie w kodzie.

Sam wzorzec projektowy Prototype. Nie wymaga jakieś diagramu UML. Szczerze to patrzenie na takie coś może bardziej cię skołować.

BuilderWzór.16 Hej dawno nie pisałem coś na temat wzorców projektowych, a jeszcze trochę ich zostało . Wzorzec projektowy Budowniczy zajmuje się utworzeniem złożonego obiektu i jego zadaniem jest ten proces uprościć. 

Jest to jeden ze wzorców, który przetrwał próbę czasu i nadal można zobaczyć jego użycie w różnych językach programowania nie tylko w C#. 

Technicznie mógłbyś uznać, że "StringBuilder" jest przykładem wzorca "builder" jak sama jego nazwa wskazuje.

If,Else Ktoś mógłby powiedzieć, że programowanie polega na klepaniu warunków if i else. Czy można uniknąć pisania if i else w kodzie?

Oczywiście, że tak.

Na pomoc przychodzą wzorce projektowe oraz słowniki.

Zanim jednak do tego przejdziemy do rozwiązań zobaczmy co możemy zrobić, aby nasze warunki if-else były bardziej czytelne.

Minimal Z .NET 6 pojawił się nowy styl pisania aplikacji ASP.NET Core. Tak możesz pisać aplikację bez pisania kontrolerów. 

Oczywiście rodzi to wiele pytań.  Kiedy ten styl ma sens? Kiedy moja aplikacja jest już zbyt skomplikowana, aby nie pisać już aplikacji w stylu minimalnym

Słuchaj, nawet jeśli twoja aplikacja jest złożona to wciąż możesz napisać aplikacje bez kontrolerów. Pokaże Ci zaraz jak ja to zrobiłem.

WorkerW ASP.NET Core bardzo łatwo jest napisać usługę, która będzie robić coś w tle. Wraz z .NET  6 jeszcze łatwiej jest ją zarejestrować. Wiele osób nie wiem, że ASP.NET Core oferuje takie gotowe rozwiązanie. Dlatego kiedyś zrobiłem nawet o tym filmik na YouTube. Oto link do niego

Ten temat do mnie wrócił, gdy na moim Instagramie dostałem zlecenie, aby zrobić materiał na temat tego, co trzeba zrobić, aby elementy z cyklem życia "Scoped" mogły żyć wewnątrz BackgroundService.

Normalnie nie jest to możliwe, ponieważ BackgroundService jest singletonem, czyli wszystko, co istnieje wewnątrz niego albo też będzie singletonem, albo wyrzuci Ci wyjątek z cyklu "Stefan co ty robisz".

Ja zlecenia na materiały traktuje poważnie więc ten problem także omówimy.

Dim Twinkle Tray to program do zarządzania jasnością twoich monitorów. Program przydatny, gdy chcesz szybko ściemnić monitor bez przyciskania guzików sprzętowych twojego monitora.

Ja korzystam z 2 monitorów i laptopa i ten program dla mnie zdał egzamin.

Gdy go zainstalujesz utworzy on małą ikonę na pasku narzędzi i klikając na niego szybko dokonasz odpowiedniej regulacji jasności danego monitora.

W ten sposób możesz łatwo dostroić jeden monitor do drugiego

New W poprzednim roku dokładnie śledziłem zmiany związane z C# 10 i .NET 6. Minęło już 3 miesiące od mojej prezentacji na konferencji 4Developers na ten temat.

Korzystając z małej przerwy od mojego kanału YouTube postanowiłem przerobić swoją prelekcję na ten wpis na blogu.

O ile zmiany w C# 10 mogą się wydawać kosmetyczne to wraz z nimi pojawił się nowy minimalny styl pisania oprogramowania. Język C# chce być trendy i pokazać jak nie wiele linek kodu wystarczy, aby napisać jakąś prostą aplikację. Chodzi o to, aby ten kod wyglądał fajowo na tle NodeJs, GO czy Python, które słyną ze swojego minimalizmu.

W tym wpisie także spojrzy na szereg dodatkowych klas i metod w .NET 6. Większość z tych zmian ma sprawić, że będziemy pisać jeszcze mniej kodu.

No to idziemy.

Chociaż zdałem sobie sprawę, że w formie tekstowej to głupio brzmi. To nie jest filmik na YouTube gdzie możesz usłyszeć mnie krzyczącego w pełnej energii "No to idziemy".

Mierzenie Powiedzmy, że chcesz zmierzyć prędkość, ilość zajmowanej pamięci jednego bloku kodu w kontekście drugiego.

Chcesz zrobić porównanie i ustalić, który kod jest lepszy.

W C# istnieje już gotowe do narzędzie i przy okazji możesz też zmierzyć jak szybko dany fragment kodu działa w zależności od wersji .NET Frameworka.

SPOILER .NET 6 jest najszybszy

SourceNa temat Source Generator jest bardzo głośnio. Czy jednak jest to srebrna kula, która jest w stanie zastąpić każde istniejące już rozwiązanie? A co robi w ogóle Source Generator?

Jego zadaniem jest wygenerować kod, czyli piszesz kod, który automatycznie za Ciebie ma wygenerować kolejny kod. Wyobraź sobie, że masz z 1000 klas i chciałbyś do każdej tej klasy dodać implementacje interfejsu.

Zakładając, że każda klasa ma słowo kluczowe "partial class" przy pomocy Source Generator dodanie wszystkich metod z tego interfejsu automatycznie byłoby dziecinie proste.

Start Początki programowania nie są łatwe. Ja, chociaż chciałem zostać programistą, od kiedy miałem 5 lat to miałem problemy ze zrozumieniem jak działają pętle i warunki logiczne w Pascalu. Tak, technicznie Pascal na studiach był moim pierwszym językiem programowania. HTML i CSS w liceum się nie liczy. 

Jak więc zacząć programować? Z

tego, co widzę po ruchu na moim od czasu do czasu ten wpis na temat porady jak zacząć programować w .NET jest często wyświetlany.

Kto by nie chciał mieć instrukcji jak zacząć swoją przygodę w programowaniu. Jaką książkę kupić? Jaki kurs na Udemy kupić za 20 zł? 

W jakim języku programowania się zakochać i potem szukać pracy tak, aby to cieszyło.  Jakie technologię pod ten dany język trzeba poznać, aby było dobrze.

Ja zakochałem się w C#? Naturalnie jako osoba, która programuje w C#  już prawie 10 lat zawodowo uwielbiam ten język programowania i go polecam. Jednakże wcale to nie znaczy, że nie ma z nim pewnych problemów. Sama platforma .NET też nie jest taka oczywista. 

Ten wpis może mnie kopnąć w przyszłości, ale będę z tobą szczery C# i jak platforma .NET ma swoje krzaczki i nie jest taka beginner friendly jakby się mogło wydawać.

CSS Ultra krótki wpis. Swagger UI jest dołączany domyślnie do aplikacji ASP.NET CORE i mnie to nie dziwi, gdyż tworzy on super formatkę do twojego REST API, która może służyć do testów, jak i do dokumentacji.

Zrobiłem o tym osobny wpis. A w tym wpisie właściwie to Ciebie tylko przekieruje do pliku CSS, który utworzy tryb ciemny w Swagger UI.

Jupyter Czym są te interaktywne notatniki? Dlaczego ostatnio jest o nich głośnio? Dlaczego ta moda doszła do środowiska .NET? Zacznijmy od początku. Interactive Notebooks i rozwiązanie Jupyter zaczęły swoją przygodę w środowisku Python.

Python to fantastyczny język programowania do tworzenia sztucznej inteligencji i pięknych wykresów. Ktoś pomyślał, że fajnie by było tworzyć interaktywne dokumenty, które będą zawierać kod, który wygeneruje coś na tym dokumencie.

Dlaczego ta moda doszła do środowiska .NET? C# nie jest na razie językiem programowania stworzonym do pisania sztucznej inteligencji, czy tam do tworzenia kolorowych wykresów, ale Microsoft chciałby, aby tak było w przyszłości.

Tak C# jako drugi Python. W końcu chcemy, aby C# stał się popularny wśród wielu programistów.

RememberCzęść NR.13 W poprzednim wpisie omówiliśmy techniki z programowania funkcyjnego jak Precomputation i Memoization. Pytanie, jak te techniki mają się do kodu w C#, który jest asynchroniczny i opiera się na obiektach takich jak Task, które symbolizują w C# przyszłość.

Jak się domyślasz Memoizacja może być bardzo utrudniona. W poprzednim wpisie nawet zaznaczyłem, że same słowniki Dictionary nie są wielowątkowo bezpieczne.

Trzeba by było korzystać z innych słowników, które są bardziej bezpieczne jak ConcurrentDictionary

A co z Precomputation? Nie wiem czy wiesz, ale sam obiekt klasy Task wspiera tą filozofię aby nie wyliczać ponownie czegoś co już zostało zrobione.

Interactive Okno, które daje możliwość pisania interaktywnego kodu w C# nie jest czymś nowym w .NET. Jednak zawsze brakowało czegoś co dało efekt wow.

Bądź szczerzy, ale umiejętności pisania kodu w konsoli to fajny bajer do powalenia na kolana innego programistę.

dotnet-reply , który domyślnie korzysta z Specter.Console pozwoli taki efekt tobie zrobić.

MemoryCzęść NR.12 Komputery są dobre w zapamiętywaniu rzeczy. Gdy patrzysz na jakąś aplikację biznesową to zapewne nie jesteś zafascynowany tym, co ona może wyliczyć, ale co ona może zapamiętać. To główny cel naszych aplikacji wyświetlić wcześniej zapamiętane dane. 

Gdzie te dane są? W plikach, w bazach danych? 

Witaj w kolejnym wpisie z kursu programowania funkcyjnego w C#?

To niesamowite jak długo prowadzę ten cykl. 

W programowaniu funkcjonalnym koncentruję się na wykonywaniu samych funkcji niż na przetrzymywania stanów pośrednich. Funkcje w programowaniu funkcyjnym mają być czystymi funkcjami.

Funkcyjne programowanie polega na uniknięciu ukrytych wejść i wyjść jak:

  • Używanie Wyjątków, aby kontrolować przepływ programu
  • Funkcja nie modyfikuje stanu
  • Funkcja nie trzyma referencji do obiektu, który miałby być zmieniony
  • Funkcja nie zapisuje czegokolwiek w polach statycznych

Z drugiej strony pamiętanie stanów jest częścią aplikacji. Zawsze gdzieś będzie warstwa dostępu do danych. 

Mamy jednak kolejne ciekawe założenie programowania funkcyjnego. Zakłada ona, że raz wyliczona nie powinna zostać wyliczana ponownie. Możemy też założyć, że raz pobrana rzecz z bazy danych nie powinna być także odczytana ponownie do jakiegoś limitu czasu.

Czyli mówimy o Cache w naszej aplikacji o możliwości pamiętania tego, co już zrobiliśmy wcześniej, aby nie robić czegoś ponownie z takim samym rezultatem.

Mamy dwa style zapamiętywania rzeczy i omówimy je w tym wpisie.

TokensNr. 1 Dziś na swoim fanpagu "JakProgramować" dostałem wiadomość, aby komuś pomóc jak napisać prostą aplikację, która ma wydzielone UI i REST API. Dodatkowo chcielibyśmy wykorzystać zasady Clean Architecture w tym projekcie tak, aby nasze warstwy były elastyczne. 

W sumie mam na ten temat mnóstwo prezentacji i prelekcji.

 

Jednak nie mam wpisu na ten temat. Postanowiłem wiec wyjąc aplikację demo, którą napisałem na prelekcję Warszawski Dni Informatyki. Omówimy więc taką aplikację i dodatkowo zastosujemy autoryzację przy pomocy JSON Web Tokenów.

Nawet taki krótki projekt wymaga dwóch wpisów. W tym wpisie skupię się na części Serwerowej, a w drugim napiszemy klienta Blazor, który przeczyta i sprawdzi ten token.

Samuraju, oto opis tej prelekcji do kodu demo:

AddOpinionNr: 4 Poprzednich wpisach stworzyliśmy API Sklepu Smoków i ją odczytaliśmy w innej aplikacji ASP.NET CORE. Na razie jednak nasze API GraphQL ma zapytania, które odczytują dane.

Jak wiadomo API powinno nie tylko odczytywać dane, ale także je zmieniać.

NUKE Umieszczanie aplikacji na środowiskach i ich kompilacja zazwyczaj nie są problemami programistów. 

Od tego są inni pracownicy, którzy mają tam swoje Jenksins-y i tym podobne narzędzie służące do automatyzacji budowania, testowania, i wdrażania aplikacji na środowiska testowe. Jenkins to jeden z najpopularniejszych systemów CI/CD. A co to jest ten CI/CD?

To skóry oznaczające odpowiednio Continuous Integration i Continuous Delivery.

Continous integration : ciągła integracja polega na tym, że zespół programistów wprowadza zmiany w kodzie, te zmiany przechodzą przez testy, po czym są one późnień integrowane z innymi zmianami i są one umieszczane np. do środowisk testowych.

Continuous Delivery : czyli ciągle dostarczanie polega na przygotowaniu struktury serwerowej, aby nasze zmiany się znalazły na środowiskach testowy albo nawet na produkcji.

Istnieje jeszcze inne pojęcie jak Continous Testing, które mówi o ciągłym testowaniu albo przez automaty, albo przez ludzi.

Wszystkie te filozofie mówią o zwiększaniu jakości kodu i procesu wdrażania poprzez zwiększenie ich częstotliwości, a żeby zwiększyć częstotliwość scalania zmian w kodzie i jego testowania to trzeba ten proces jak najbardziej jest to możliwe zautomatyzować.

Zazwyczaj programiści się tym nie interesują, bo bądźmy szczerze to nie jest na twojej głowie, jakie komendy CMD są odpalane i  czy to jest PowerShell, czy innym język jak BASH, aby twoje zmiany przeszły przez tę rurę procesów, aby w końcu trafić na inne środowisko testowe albo nawet produkcyjne.

query={}Nr: 3 W poprzednich dwóch wpisach stworzyliśmy proste API w GraphQL. Widzieliśmy jak odpytywać nasze API specyficznym JSON-em w GraphQL Playground. Jak to jednak wygląda w prawdziwej aplikacji? Jak wygląda taki gołe polecenie HTTP POST czy HTTP GET?

Czym jest dokładnie zapytanie w GraphQL. W kontekście pisania aplikacji GraphQL zapytanie można tworzyć w definicji Schema. Ono dziedziczy po ObjectGraphType.

Dla klienta "zapytanie" to specyficznym zapis polecenia w formie JSON? Dzisiaj się na tym skupimy.  O ile jestem fanem rozwiązania Swagger , który generuje formatkę do testowania REST API. To w tym przypadku dla GraphQL potrzebujemy oddzielnego programu lub aplikacji aby GraphQL przetestować. Gdy zrozumiemy jak się odpytuje GraphQL API poleceniami POST i GET, wtedy napiszemy swoją stronę w ASP.NET Core, która odczyta nasze napisane w poprzednich wpisach API.

Serilog Na tym blogu mam serię artykułów, które opisują fajne biblioteki NuGet dla ASP.NET CORE. Dziś spojrzymy na Serilog. 

Logowanie błędów informacji jest kluczowe. Mam nawet wpis o tym, jak użyć NLoga w ASP.NET CORE i obecnie go używam na swoim blogu, aby od czasu do czasu sprawdzić jakie błędy w nim są.

Bez logowania nie znalazłbym uszkodzonych wpisów, które w wyniku złego formatowania HTML wyrzucały wyjątek.

Dlaczego Serilog, a nie coś innego? Najważniejsza różnica pomiędzy Serilog a innym frameworkiem do logowania jest fakt, że ta biblioteka ma wybudowany tryb strukturalnego logowania. Każdy element Serilog jest paczką, którą można dodać aby go rozszerzyć.

Serilog też może być skonfigurowane za pomocą appsetting.json. Czyli nie zmieniamy kod aby zmienić styl logowania aplikacji. NLog miał natomiast swoją własną konfigurację w oddzielnym pliku XML co możesz uznać za wadę.

Dlaczego jest to takie ważne? W świecie Kubernetesa i Dockera możesz też potem te konfigurację zmieniać w zależności od środowiska

Problems? To normalne, że w domenie chmury i aplikacji HTTP każdy serwis wzajemnie się odpytuje. Jak to robimy w .NET ? Poprzez klasę HTTPClient.

Jaki jest problem z HTTPClient?  To pytanie często wraca jak bumerang. W trakcie pisania aplikacji, a nawet na rozmowach kwalifikacyjnych. 

Pamiętam jak raz w pracy na ten problem kazali mi po prostu zainstalować paczkę NuGet "Flurl", która otacza HttpClienta i nie myśleć o tym, jakie on powoduje problemy.

Potem wiele miesięcy później zostałem postawiony przed pytaniem, dlaczego trzeba uważać na HTTPClienta w .NET i nie miałem na to dobrej odpowiedzi.

Myślisz sobie przecież to proste. Chce wykonać zapytanie HTTP do strony internetowej to co tworzę sobie instancje HTTPClient i wykonuje zapytanie. 

Zobaczmy co się stanie, gdy utworzę 20 instancji HTTPClient, który ma odpytać moją stronę.

GraphQLNr: 2 W poprzednim wpisie stworzyliśmy podstawowe API w GraphQL. Nasz sklep smoków jest na chwilę obecną bardzo prymitywny. Nasza smok nie zawiera w sobie złożonych typów. Nie zastosowaliśmy wzorca "Data Loader" w GraphQL, aby utrzymać strukturę zapytań. Na razie nasze API w sumie obsługuje tylko jedno zapytanie. Pobierz wszystkie smoki, które są na sprzedaż.

Jak dodać parametry do naszych zapytań w GraphQL?

Jak dodać autoryzację do swojej Schema.

Rozbudujmy więc nasze api.

GraphQLNr: 1 Co to jest GraphQL? Czyli jak można jeszcze lepiej zrobić Rest API? GraphQL został wymyślony aby osiągnąć lepszą elastyczność i efektywność pomiędzy interakcjami klient / serwer.

GraphQL w esencji jest językiem zapytań do twojego HTTP API. Warto zaznaczyć, że GraphQL jest tylko nakładką do twojego API, a raczej używając języka ASP.NET Core jest to Middleware.

To nie biblioteka, to nie produkt, to nie baza danych.

Ta nakładka jest alternatywą do tworzenia Rest API. Zobaczmy na rysunkach w czym jest problem i co rozwiązuje GraphQL.

GrapQL polega tym, że wysyłasz do klienta polecenie HTTP POST albo GET. W treści tego polecenia jest JSON, które informuje API co chcesz zrobić.

Czyli jeśli chcesz listę produktów to nie szukasz odpowiedniego adresu i metody w REST API. Zastanawiasz się jak napisać zapytanie w JSON aby tą listę produktów pobrać.

Middleware Na tym blogu były już artykuły na temat AutoMapper, Swagger UI, IServiceCollection. Co jeszcze jest potrzebne do aplikacji ASP.NET Core.

W sumie to jest to coś na czym złapałem się na swoich webinarach. Przechwycenie wyjątków w każdej metodzie Controler-ów wydaje się głupie. Napisanie kodu, w który nie wystąpią wyjątki jest niemożliwe.

Gdzie powinniśmy je przechwytywać tak, aby zapisać je później do logów.

Na pomoc przychodzi Middleware, który także rozwiązanie inny problem. W końcu wypadałoby przechwytywać wyjątek w jednym miejscu. Nie może być tak, że przechwytujesz wyjątek 5 razy i wyrzucasz go dalej.

_private Krótka piłka. Zapewne wiele razy pisałeś pola prywatne w C#. Większość standardów mówi, że pole prywatne powinno być pisane w stylu camelCase oraz powinno zaczynać się od podkreślenia (underscore) _camelCase.

Pole prywatne zazwyczaj są stosowane we wstrzykiwaniu zależności. Dlatego chcielibyśmy w ich nazwach odróżniać je od nazwy parametru w konstruktorze.

Tak aby nie pisać takiego kodu :

Onion Napisać aplikację to jedno. Wdrożyć to drugie. Tylko jak później tę aplikację utrzymać i ciągle zmieniać?  Dodawać nowe funkcje, poprawiać błędy, zmieniać istniejącą logikę biznesową.

Można by powiedzieć, że to jest największa zmora programowania. W końcu każdemu zdarzyło się chociaż raz powiedzieć lub pomyśleć

"Ta aplikacja to takie gówno, że szybciej bym napisał lepszą od zera".

Czasami jak czas i pieniądze pozwolą, tak się dzieje. Piszemy aplikację drugi raz, bo poprzednia wersja jest Behemotem.

Flow Statyczne metody. Dla początkującego programisty z krótkim stażem pracy są one cudowne. W sumie to kiedyś ten blog napisany w .NET miał wiele klas statycznych i dużo pomocniczych metod jak np. skróć mi URL, skróć mi treść wpisu, wstaw mi obrazek, usuń mi Polskie znaki, wygeneruj mi tabelkę HTML i tak dalej i tak dalej.

Jaka jest najważniejsza zaleta metody statycznej.

Możesz wywołać metody statyczne wszędzie. W każdej klasie, widoku Razor cshtml. Jest to wygodne. Nie musisz robić wstrzykiwania zależności. Nie musisz tworzyć instancji klasy, aby skorzystać z danej metody.

EventDriven CQRS to jeden z najczęszczych wzorców projektów przy budowaniu aplikacji ASP.NET CORE. Fundament polega na oddzieleniu kodu, który odczytuje dane (Query) i na kod który te dane modyfikuje (Command).

Jeśli znasz operacje Create-Read-Update-Delete, to pomyśl o Query jako zapytaniach Read, a Command jako modyfikację, które Tworzą-Aktualizują bądź kasują dane.

Biblioteka MediatR, którą opisałem wcześniej, wspaniale przyspiesza pisania aplikacji CQRS z małym dodatkiem wzorca projektowego Mediator. Oczywiście stawiając pierwsze kroki z aplikacją CQRS, można popełnić błędy. Pamiętam jak ktoś, na moim pierwszym webinarze na temat CQRS zapytał wprost, czy Command może uruchomić kolejny Command.

Oczywiście jest to kiepski pomysł

Install Gdy aplikacja ASP.NET Core jest duża lub jest rozbita na wiele małych kawałków to wtedy warto zastosować wzorzec IServiceCollection. 

Pozwala to tobie rozbić definicje wstrzykiwania to kolejnych serwisów do osobnych klas bądź projektów w solucji. Pisząc złożoną aplikację ASP.NET Core, w którym momencie twoja klasa startup.cs urośnie.

Dlatego pisanie takich swoich rozszerzonych metod wydaje się nieuniknione. Spójrz na ten kod

Sort Files Czy wiesz, że istnieje język skryptowy AutoHotkey (AHK Script), który służy do pisania zautomatyzowany akcji na danym komputerze. Dzięki nie mu możesz na przykład podpiąć daną akcję na skrót klawiszowy. Otwierać swoje ulubione foldery pod F7. Zablokować ALT+F4.

Dodatkowo modyfikować zawartość schowka kopiuj/wklej.

Na przykład modyfikować tekst z tabulatorami tak, aby była to ładna tekstowa tabelka. 

Ponownie otworzyć zamknięte wcześniej aplikacje. Automatycznie przerzucać pliki z 1 folderu do drugiego.

AHK Script to potężne narzędzie. Z ciekawości przejrzałem te wszystkie skrypty i wybrałem 1, który rzeczywiście dla mnie jest użyteczny i od ponad 3 miesięcy działa w tle. Może, kiedy przepiszę go na Pythona czy C# na razie  AHK Script zdaje egzamin, jeśli chcesz pisać szybko takie skrypty.

BlackScreen Zainstalowałeś OBS. Chcesz udostępnić swój monitor poprzez "Display Capture" i masz czarny ekran. O co chodzi? Jak to naprawić?

Do mnie też ten problem wrócił, gdy zainstalowałem system Windows 10 od nowa. Swoją drogą wszystkie pluginy z OBS zachowałem, ponieważ zrobiłem bezpośrednią kopię całego programu 

Z czego ten problem z czarny ekranem wynika. Dotycz on użytkowników, którzy mają 2 karty graficzne, które są zintegrowane. Jedna z nich zajmuje się grami/programami druga twoim pulpitem w systemie Windows.

OBS, gdy chce rzutować ekran, to korzysta ze złej karty graficznej. Trzeba powiedzieć OBS, aby korzystał z kart graficznej odpowiedzialnej za pulpit/ekran twojego komputera.

Przejdźmy więc do rozwiązania

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ę mogł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ż źle zbudowaną przez ze mnie listę 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ą kolekcję.

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. Ciągłe 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

Wszystkie Kategorie