Wiecie jaka jest definicja wzorca projektowego, prawda? Za wikipedią: “a general repeatable solution to a commonly occurring problem in software design“. Czym zatem będzie antywzorzec? Czymś takim: “a general repeatable anti-solution to a commonly occurring problem in software design“. Czyli: recepta na napytanie sobie biedy. Czerwony pijany znak z napisem: “Nie idź tą drogą”.
Strona głównaUżytkownik
rroszczyk | użytkownik
Sztuka programowania 2983 dni, 15 godzin, 56 minut temu 167 źrodło rozwiń
Jak wspomniałem w jednym z wcześniejszych już wpisów, nie ma znaczenia, gdzie aktor jest zlokalizowany. Dzięki AKKA.NET jest to szczegół konfiguracyjny. Jeśli pewnego dnia, stwierdzimy, że wykonywanie obliczeń na jednym komputerze nie wystarcza, wtedy po prostu zmieniamy konfigurację, aby hostować danego aktora gdzieś indziej. Framework zadba o komunikację (TCP) między węzłami znajdującymi się w innych sieciach. W ten sposób, bardzo łatwo jest sk...
Programowanie rozproszone 2986 dni, 9 godzin, 57 minut temu 79 źrodło rozwiń
Gdy tworzymy kod jakiejś własnej paczki nugetowej, bardzo często wykorzystujemy kompilację w wariancie Any CPU. Dzięki temu docelowa DLLka zadziała zarówno na x86 jak i x64, ale również i na ARM w sytuacji gdy mamy do czynienia z systemami mobilnymi. Niestety nie zawsze jest tak kolorowo i prosto, i czasem Any CPU po prostu nie zadziała - np. w sytuacji gdy mamy składowe DLLki przygotowane pod określone platformy/architektury...
DbUp jest prostą biblioteką, przeznaczoną do aktualizacji baz danych. Jeśli korzystamy z ORM, zwykle wtedy dany framework posiada już analogiczną funkcjonalność. Na przykład, EntityFramework wspiera migrację, która umożliwia automatyczną aktualizacje tabel i procedur. Z drugiej strony, nie zawsze jest potrzeba korzystania z tak ciężkich rozwiązań. Bardzo popularną biblioteką do odczytu danych z baz jest Dapper. Niestety nie posiada on mechanizmu podobne...
Sztuka programowania 2988 dni, 5 godzin, 24 minuty temu 169 źrodło rozwiń
Ależ jesteśmy rozpieszczeni! Królowie świata i okolic! Każdy chce nam, programistom, dogodzić, nie zważając czy ma to sens czy nie. Zupełnie. Ale czy firmy, padając przed programistami na kolana, faktycznie robią dobrze i sobie i nam? I co my na to? O negatywnym wpływie wszelkich przejawów jesteśmy-wielką-rodziną-przytulmy-się-i-żyjmy-razem-bullshit na programistów pisałem już niedawno w bardzo chodliwym poście “Nie sprzedawaj się za piłkarzyki“. Ale jakie skutki na zachowanie programistów względem firm...
Luźny wpis, w którym poruszę temat raportowania stanu projektu. Zachęcam do przeczytania wszystkich, którzy takie raporty piszą, a przede wszystkim tych, którzy je czytają :). Odpowiem dlaczego pytanie „ile procent projektu mamy ukończone?” może zakłamywać rzeczywistość i dawać złudne poczucie bezpieczeństwa. Pokażę również bardziej skuteczną metodę raportowania stanu projektu. Gdy stawiałem pi...
Standardowo w aplikacjach używa się takich frameworków jak log4net czy nlog w celu logowania kluczowych informacji jak i wyjątków. Bardzo szybko staje się jasne (szczególnie w przypadku micro-serwisów), że analizowanie plików tekstowych z logami jest czasochłonne. Z tego względu dobrze mieć centralne repozytorium logów i łatwy do niego dostęp. Większość rozwiązań umożliwia dzisiaj indeksowanie oraz łatwe przeszukiwanie danych. Jednym z bardziej znanych produktów je...
Metoda Split dzieli łańcuch znaków na części w zależności od separatora, który został przekazany w parametrach. Ostatnio jednak natknąłem się na plik CSV, który oprócz tego, że jest rozdzielony przecinkami to na dodatek ma jeszcze ogranicznik pól. Parsowanie takiego pliku metodą String.Split nie będzie prawidłowe. Poniżej implementacja metody String.Split z możliwością zdefiniowania ogranicznika pól(checkSeparator)...
Sztuka programowania 2999 dni, 18 godzin, 4 minuty temu 176 źrodło rozwiń
Dzisiaj kolejny element HTTP 2.0, tym razem wymagający zmiany kodu po stronie aplikacji. Tak jak już z wszystkimi opisanymi wcześniej zmianami, ma to na celu zmniejszenie opóźnienia (latency) wynikającego z liczby zapytań. Doskonale wiemy, że każda strona ma referencje do innych zasobów takich jak CSS czy pliki graficzne. Wcześniej zajęliśmy się już HTTP Multiplexing, który znacząco niweluje problem. W jednym z poprzednich wpisów pokazałem również jak w H...
JMeter jest darmową aplikacją bardzo przydatną podczas wykonywania “load testing”. Interfejs użytkownika co prawda jest bardzo mało intuicyjny, ale po pewnym czasie można przyzwyczaić się. Aplikacja, po uruchomieniu prezentuje się następująco (...) Oczywiście na oficjalnej stronie można znaleźć pełną dokumentację, więc moim celem nie jest opisywanie każdego elementu. Jako próbkę, po prostu spróbujmy stworzyć test, który będzie łączył się z jakąś stroną (np. Google) i...
Nigdy nie ciągnęło mnie do logowania. Zawsze miałem problem z określeniem poziomu na jaki zasługiwała dana informacja, a może ostrzeżenie. Czy to błąd, czy to już krytyczny błąd. Jak mam to dobrze zalogować. Czemu te okrutne logi tak strasznie mieszają mi się w aplikacje, wtedy jeszcze nie znałem podejścia AO...
ASP .NET, OgólnePiotr ZielińskiLeave a comment IIS w Windows 10 wspiera już od jakiegoś czasu nową wersję protokołu. W zasadzie prawdopodobnie nic nie musimy robić, jeśli posiadamy prawidłową wersję IIS. Oczywiście użytkownicy muszą posiadać również odpowiednią wersję przeglądarki internetowej. Ich kompatybilność można sprawdzić tutaj. Jak widać, Edge, Chrome, Firefox, Opera czy iOS Safari radzą sobie najlepiej. W przypadku IE, najnowsza wersja wspiera HTTP 2.0 tylko częściowo. Jeśli jeszcze nie zains...
Jak wygląda rynek pracy w naszej branży – wiemy wszyscy. “Kandydat nasz pan”. Firmy często prześcigają się w “dogadzaniu” złowionym już programistom, kusząc różnymi dogodnościami kolejną zwierzynę. Widać to po wielu ogłoszeniach i komunikacji wychodzącej od rekruterów. A to piłkarzyki w biurze, a to konsole, a to zjeżdżalnia (sic!), a to jeszcze nie wiadomo co. Zwykłe rzutki przy tym wymiękają. Pracownicy takich placów zabaw także lubią szczycić się, jak to firma tuli ich i kołysze za pomocą powyższych z...
ASP .NET, OgólnePiotr ZielińskiLeave a comment Kilka postów chcę przeznaczyć na temat HTTP 2.0. Zamiast pisać tylko o nowościach w nowej wersji protokołu, warto najpierw zrozumieć jak działała dotychczasowa wersja czyli HTTP 1.1. Pierwszym problemem HTTP 1.0 oraz HTTP 1.1 była obsługa wielkiej ilości zapytań. Każda strona, aby prawidłowo wyświetlić się potrzebuje załadować mnóstwo zewnętrznych zasobów takich jak skrypty JS, arkusze css czy grafika. Ponadto HTTP oparty jest na TCP więc ponadto mamy do...
ASP .NET, OgólnePiotr ZielińskiLeave a comment Zanim przejdę do kolejnych usprawnień w HTTP 2.0, warto poświęcić chwilę na zastanowienie się jak omijamy problemy HTTP 1.1 dzisiaj. Większość stron wciąż opiera się na HTTP 1.1 i nie najgorzej radzą sobie z wydajnością. Oczywiście sporo jest do poprawy, ale strony działają na urządzeniach mobilnych bez ogromnych opóźnień. Mimo wszystko, opóźnienie (latency) jest jednym z podstawowych problemów rozwiązanych przez HTTP 2.0. Zastanówmy się, jak dzisiaj...
Tworzy się wszystko po angielsku, a przez to nie ma problemów ze znakami "zażółć gęślą jaźń". Ja popełniłem ostatnio małą aplikację, gdzie postanowiłem że cały UI będzie po polsku, ponieważ do takich odbiorców kieruje swój projekt. Skoro jedno języczne to będzie to proste. HTML i opisy po polsku, atrybuty i informacje po polsku. Nic nie zapowiadało małej katastrofy, ale ta nadeszła całkiem szybko...
Podczas zabaw z Dependency Injection można się trochę zapędzić używając kontenerów, uzależniając od nich cały kod naszej aplikacji. A to źle. Na dobra sprawę logika aplikacji nie powinna nawet wiedzieć z jakiego kontenera korzystamy. Do kontenera nie powinniśmy się przyzwyczajać – jeśli wykorzystujemy go poprawnie, to jego podmiana na inną bibliotekę nie będzie nastręczać żadnych trudności. Tak naprawdę to całkowite pozbycie się kontenera z systemu również powinno być proste. Pisałem już trochę o tym w p...
Sztuka programowania 3014 dni, 20 godzin, 9 minut temu 189 źrodło rozwiń
W poprzednim wpisie pokazałem, w jaki sposób możemy zaprojektować obsługę błędów. Jak widać mamy do dyspozycji sporo opcji. Z punktu widzenia AKKA.NET nie jest to jednak tak skomplikowane. Wystarczy przeładować jedną metodę i zwrócić odpowiedni obiekt. Tak jak w poprzednim wpisie będziemy testować kod na następującym “systemie”: Dla przypomnienia nasz ApplicationUserActor wygląda następująco: public class ApplicationUserActor : UntypedActo...
Programowanie rozproszone 3017 dni, 18 godzin, 18 minut temu 102 źrodło rozwiń
ASP .NET, BezpieczeństwoPiotr ZielińskiLeave a comment W poprzednim poście opisałem zasadę działania protokołu HTTP Strict Transport Security. W skrócie najważniejsze punkty to:Serwer zwraca specjalny nagłówek “Strict-Transport-Security”, który powinien być przesyłany wyłącznie przez HTTPS.Po otrzymaniu nagłówka od serwera, przeglądarka zawsze będzie łączyć się przez HTTPS, a nie HTTP. Użytkownik jeśli nawet będzie chciał użyć HTTP, przeglądarka dokona wewnętrznego przekierowania na HTTPS (307 – interna...
BezpieczeństwoPiotr ZielińskiLeave a comment Protokół HTTPS jest dzisiaj powszechny na wszystkich stronach z wrażliwymi informacjami. Banki są klasycznym przykładem. HTTPS “gwarantuje”, że dane są przesyłane w szyfrowanej formie, a klient wie, że łączy się z oryginalną stroną. Certyfikat publikowany przez stronę jest gwarantem, że korzystamy właśnie z tej aplikacji, z której zamierzaliśmy. W najprostszej postaci wygląda to zatem następująco: Tego przynajmniej spodziewamy się… Problem w tym, że czasam...