Są takie słowa kluczowe w języku C#, bez których można się obejść. Tylko po co się ograniczać, jeśli ich zrozumienie może zaoszczędzić nam czas, liczbę linii kodu do napisania… i wzbudzić zazdrość wśród Javowców :) Zapraszam na trzy słowa o delegate.
Sztuka programowania 3197 dni, 2 godziny, 44 minuty temu 402 źrodło rozwiń
Gdy przychodzi odpowiedzieć na pytanie czym się zajmujemy, każdy z Nas dość automatycznie i dumnie odpowiada, że jest programistą. Co poniektórzy dodają jeszcze z coś z zakresu swoich umiejętności. Programuje w .NET-cie, Java-wie, Web-ach itd. Ale czy mówiąc, że jesteśmy programistami to czy naprawdę rozumiemy kim jesteśmy? Czy rozumiemy różnicę pomiędzy programistą a programistą .NET-owym? Co daje Nam zmiana sposobu ...
Mamy już skompilowanego liba, do którego będziemy tworzyć wrapper aby później użyć go w C#. Tworzymy więc nowy projekt Dodajemy wszystkie pliki .h z wcześniejszego projektu: Teraz dodajemy skompilowaną bibliotekę w C++, którą chcemy podlinkować. W tym celu ustawiamy Include Directories we właściwościach projektu: (możemy też skopiować skompilowaną bibliotekę bezpośrednio do katalogu z kodem źródłowym naszego wrappera, wtedy nie musimy tu nic zmieniać) Wskazujemy też nazwę pliku ...
Daj się poznać 2016 3210 dni, 23 godziny, 11 minut temu 161 źrodło rozwiń
Zamień bóla na enuma. Dlaczego zamienić? Moim zdaniem czytelniej i jasno sformułowana myśl i łatwiej zrozumieć. Nie chodzi o prosty przypadek, gdzie zamiana polegałaby na zamianie true/false na MyEnum.True/MyEnum.False – nie nie, to byłoby szaleństwem. Ale może od razu do kodu, bo czas nagli dzisiaj. Pierwszy przypadek, wszystko działa jak należy...
Sztuka programowania 3208 dni, 3 godziny, 4 minuty temu 336 źrodło rozwiń
Visual Studio umożliwia w bardzo prosty sposób podpisywanie bibliotek, które rozwijamy w ramach solucji. Dzięki takiemu podpisowi możemy potwierdzać nie tylko ich autentyczność, ale także zapewnić, że w żadnej aplikacji, która ich używa, nie zostaną złośliwie podmienione. Dlaczego mielibyśmy się w ten sposób zabezpieczać?
W .NET istnieją dwie przydatne klasy do logowania wszelkich informacji: Trace oraz Debug. Często różnica nie jest jasna oraz klasy są ze sobą mylone. Co się dokładnie dzieje, gdy napiszemy następujący fragment kodu? Trace.WriteLine("Trace test"); Debug.WriteLine("Debug test"); Efekt wydaje się podobny, w okienku debug zobaczymy wykonane logi: Najlepiej zajrzeć do źródeł powyższych klas. Debug.WriteLine wygląda następująco: [System.Diagnostics.Conditiona...
Słowo kluczowe yield – obecne w języku C# od dawien dawna – w prosty sposób może przyczynić się do poprawy wydajności naszego kodu. Jak działa? Gdzie go używać? Jak może przyczynić się do poprawy działania aplikacji? Przekonajmy się...
Sztuka programowania 3213 dni, 22 minuty temu 467 ź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 3216 dni, 17 godzin, 28 minut temu 81 ź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 3218 dni, 12 godzin, 55 minut temu 170 źrodło rozwiń
Jest wiele czynników, które mówią o jakości kodu, jednym z nich jest jego czytelność. W jaki sposób można, bez dużego nakładu pracy, poprawić czytelność kodu? Czy wielkość i poziom skomplikowania projektu mają wpływ na czytelność kodu? Kto jest odpowiedzialny z powstawanie nieczytelnego kodu i czy czytelność kodu mówi coś o profesjonalizmie programisty? W jaki sposób można zapobiegać a w jaki sposób leczyć zainfekowany kod? „Lepszy jest kod dobrze napisa...
Sztuka programowania 3227 dni, 22 godziny, 24 minuty temu 527 ź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...
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...
Dzisiejszy świat C# obiegła świetna wiadomość, Project Rider to nowe IDE, środowisko programistyczne dla C# od JetBrains-a. W skrócie połączenie InteliJ i ReSharper-a – corss – platformowe 😀 Ludzie z NDC London byli tak uprzejmi, że dzisiejszą poranną sesję Haddiego, który miał przyjemność i zaszczyt (zapewne) ogłosić tą świetność ...
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 3245 dni, 3 godziny, 40 minut temu 190 ź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 3248 dni, 1 godzinę, 49 minut temu 103 źrodło rozwiń
Po pierwszym wpisie na temat programowanie funkcyjnego w języku C#, dostałem sporo informacji, że końcowy kod jest dużo mniej czytelny od oryginalnego. Faktycznie dla osób, które nigdy nie pisali w języku funkcyjnym może być on trudniejszy do rozczytania. Spróbuję w niniejszym wpisie, pokazać jaka jest idea takiego zapisu. Używając programowania funkcyjnego, pracujemy na danych i funkcjach, które są wyraźnie od siebie oddzielone. Technika Pipeliningu pokazuję po pierwsze naturalny...
Sztuka programowania 3271 dni, 1 godzinę, 37 minut temu 251 źrodło rozwiń