Today quickly about two topics I had to resolve recently.Bypassing Angular Sanitizer First one is about Angular Sanitizer, or maybe DomSanitizer that is actually the class implementing the Sanitizer interface. The purpose is quite clear, it is inspecting the content of a given value and prevents from unsafe content. I have recently tested the oEmbed content for one of the vimeo videos (you can check what oEmbed is, in this post of mine) and I decided to bind a div innerHtml to some string representati...
Strona głównaUżytkownik
Hlautameki | użytkownik
Daj się poznać 2017 2827 dni, 16 godzin, 29 minut temu 44 źrodło rozwiń
Jest to kolejny post z serii 'Jak zrealizowałem|położyłem swój projekt' pisany przy okazji DSP2017, gdzie po kolei omawiam każdy aspekt projektu od specyfikacji wymagań, po finalny deploy. Tym razem omawiam architekturę swojego projektu.
Daj się poznać 2017 2827 dni, 16 godzin, 29 minut temu 197 ź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 3286 dni, 16 godzin, 57 minut temu 251 źrodło rozwiń
C# jest językiem, który był zaprojektowany z nastawieniem na programowanie obiektowe. Ewoluując, z każdą wersją zawiera co raz więcej elementów, które pozwalają na skorzystanie z paradygmatu języków funkcyjnych. Na przykładzie metody budującej listę html’ową pokażę kilka technik, dzięki którym zamienimy typowy kod C# w kod bardziej przypominający kod języka funkcyjnego.
Sztuka programowania 3286 dni, 16 godzin, 57 minut temu 552 źrodło rozwiń
Każdy z nas jest choć trochę leniwy. Jedni troszkę mniej, inni troszkę bardziej. Ja na ten przykład czasem się rozpędzam i piszę kod, który potrzebuje. Potem o nim opowiadam, a potem ktoś pyta czemu nie skorzystałem z jakiejś tam gotowej biblioteki. Wiem, że każdy z nas należy do mensy i wie, że ten wpis nie wziął się z powietrza.
Jeśli jeszcze nie ściągneliście VS 2015, to zapraszam: http://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs.aspx Smart Unit Tests to sposób automatycznego wygenerowania scenariuszy dla testów jednostkowych. Wiele o tym już na blogu jak i w artykułach na MSDN pisałem, a konkretnie o Pex & moles. Chciałbym dzisiaj jednak zaprezentować wbudowaną funkcję w VS 2015. Nie wymaga ona instalacji zewnętrznych narzędzi. Na początku od razu poważna wada.. Póki co, wspierany jest wyłącznie ...
Z jednej z prezentacji nt. GIT-a dowiedziałem się, że posiada on coś co nazywa się Interactive staging. Pomyślałem, że czegoś takiego brakuje mi w codziennej pracy z duetem SVN/Tortoise SVN. Jak się jednak okazało i w Tortoise SVN od ostatniej wersji jest odpowiadająca temu funkcjonalność.
W nowej wersji c# zdecydowano się zezwolić na konstruktory bezparametrowe w strukturach danych. Kiedyś pisałem dlaczego, nie można było ich definiować w poprzednich wersjach języka. Chodziło po prostu o wydajność, szczególnie podczas alokacji tablic danych. Dodam, że w CLR zawsze było dozwolone posiadanie konstruktorów bezparametrowych i wyłącznie c# na to nie zezwalał. W C# 6.0 możliwe już jest napisanie własnego konstruktora bez parametrów, ale wciąż należy pamiętać o możliwych problemach wydajnościow...
Dzisiaj kolejna nowa funkcjonalność w c#. Zacznijmy od przykładu:publicclass Point { publicdouble Dist => Math.Sqrt(X * X + Y * Y); publicdouble X; publicdouble Y; } X oraz Y to zwykłe pola (tak nie powinno się ich definiować jako publiczne ale to tylko przykład). Następnie Dist to dziwny twór… Wiemy, że mamy tam wyrażenie lambda, które wywołuje Math.Sqrt i robi obliczenia. Zobaczymy jak możemy z tego skorzystać w kodzie:Point point =new Point(); point.X =5; point.Y =6; double dist = point...
Czas zacząć pisać o nowym c#. Najpierw pobierzmy wersję CTP z: http://www.visualstudio.com/en-us/downloads/visual-studio-14-ctp-vs.aspx Oczywiście to preview, więc odradzam instalowanie tego w pracy, chyba, że na VM. Lepiej nie ryzykować re-instalacją wszystkiego od nowa. Często w kodzie można spotkać następujący wzorzec:class Person { privatereadonlystring _firstName; privatereadonlystring _lastName; public Person(string firstName,string lastName) { _firstName = firstName; _last...
Debugging complex exceptions with $exception pseudovariable
Skrócony opis nowości, które pojawiły się wraz z premierą Windows Phone 8.1
Mobile development 3722 dni, 19 godzin, 40 minut temu 187 źrodło rozwiń
W C# istnieje mało znana składnia do inicjalizacji zagnieżdzonych obiektów (nested object initializer syntax). Na czym polega cała zabawa? Spójrzmy na kod, za pomocą którego inicjalizujemy zagnieżdżony obiekt: Rectangle rectangle = new Rectangle { P1 = { X = 0, Y = 1 }, P2 = { X = 2, Y = 3 } };
TortoiseSVN has a function named simply “rename” which allows you to change the file name and keep the file history as well. But what if we change the file name for example during refactoring using Visual Studio? Are we fated to lose file history?
W dzisiejszym wpisie pokażę dosyć mało znaną konstrukcję TOP…WITH TIES. Muszę przyznać, że sam trafiłem na nią całkiem niedawno mimo, iż była ona dostępna już w SQL Server 2000.
Bazy danych i XML 3741 dni, 19 godzin, 33 minuty temu 293 źrodło rozwiń
Czasami są takie dni w życiu człowieka (a nawet programisty), że wszystko idzie zgodnie z planem. Każde zadanie, które dostaje jest banalne albo (lepsza opcja) zrobione już wcześniej. Miałem kiedyś taki dzień. Jakby to powiedział Skipper dzień idealny. Niestety w moim przypadku to się nie sprawdziło. W moim przypadku sprawdza się raczej “jeśli wszystko idzie zgodnie z planem to znaczy, że to zasadzka”. No ale wracając do meritum dostałem kiedyś “banalne” zadanie musiałem wymienić tło w głównym okni...
Ostatnio znalazłem fajny przykład pokazujący jak można nieoczekiwanie pogorszyć wydajność aplikacji. Załóżmy, że mamy metodę, która jako parametr wejściowy przyjmuje funkcję...
Sztuka programowania 3745 dni, 19 godzin, 27 minut temu 391 źrodło rozwiń
Chyba każdy programista piszący w C# usłyszał kiedyś (najczęściej na rozmowie kwalifikacyjnej) pytanie o typy danych występujących w tym języku. Naturalną odpowiedzią są typy wartościowe i typy referencyjne (taka nierozłączna para bliźniąt), mówimy jakie są różnice pomiędzy nimi, mówimy mądre zdania o stosie i o stercie. Czasem dostajemy “podchwytliwe” pytanie w stylu: String to typ referencyjny czy wartościowy? String to jest przechowywany na stosie czy na stercie? Tablica intów to typ refer...
Sztuka programowania 3747 dni, 9 godzin, 17 minut temu 286 źrodło rozwiń
Dzisiejszy wpis będzie dotyczył oczywistej oczywistości. Ale czy na pewno? Zostałem kiedyś zapytany na jednej z pierwszych rozmów o pracę, żeby wymienić jak najwięcej zdarzeń związanych z cyklem życia strony. Pierwszymi (i niestety jedynymi)...
Architektura 3746 dni, 10 godzin, 48 minut temu 920 źrodło rozwiń
Dziś kolejny wpis na temat mikro-optymalizacji. Oczywiście dla większości aplikacji biznesowych taka różnica w wydajności nie ma kluczowego znaczenia. Myślę jednak, że jest to ciekawe z punktu widzenia IL i jak naprawdę działa język c#. Jeśli ktoś z kolei piszę np. grę albo aplikację czasu rzeczywistego, wtedy ma to już znaczenie, co robimy w każdej sekundzie. Zacznijmy od razu od wniosku: foreach w niektórych przypadkach jest znacząco wolniejszy od klasycznego for. Nie powinno to dziwić – w końcu iter...