Atrybut InternalsVisibleTo służy do definiowania zaprzyjaźnionych bibliotek. “Zaprzyjaźniona” biblioteka to taka, która ma dostęp do klas i metod z modyfikatorem “internal”. Zwykle korzysta się z niego w celu przetestowania wewnętrznych klas. Czasami bywa, że klasy w bibliotece mają modyfikator internal i co za tym idzie, nie ma do nich bezpośrednio dostępu z testów. Za pomocą InternalsVisibleTo można zrobić wyjątek dla jakieś biblioteki, w tym przypadku projektu z testami.
Dzisiaj powracamy do zagadnień związanych z bezpieczeństwem aplikacji webowych. Przez kilka następnych postów będę pisał o XSS. Oprócz SQL Injection, XSS jest jednym z “popularniejszych” ataków przeprowadzanych na aplikacje webowe. O ile zasada działania może wydawać się prymitywna, to wiele stron, nawet tych z czołówki (np. Amazon), były podatne na XSS. Co więcej, tak jak SQL Injection, wykorzystanie XSS może spowodować całkowite przejęcie kontroli nad aplikacją. Nie należy więc traktować luki XSS jako...
W swojej stosunkowo krótkiej karierze programistycznej, zdążyłem już pracować z różnymi technologiami. Naturalnym tego następstwem są oczywiście wszelkiej maści porównania. Czasem np. porównuje Razora z MVC do XAMLa. I choć w teorii bardziej rozbudowana jest ta druga z obu tych technologii, to w praktyce Razor ma kilka konstrukcji, do których tęsknym okiem wyglądają designerzy XAMLa. Jedną z nich jest IF. I choć w teorii można ją częściowo zastąpić choćby za pomocą VisualStates, to w praktyce okazuje się...
Mobile development 2649 dni, 15 godzin, 13 minut temu 368 źrodło rozwiń
W .NET 4.5 pojawiła się metoda Task.Run. Z przyzwyczajenia jednak przez długi czas używałem tylko Task.Factory.StartNew. Obie metody służą do stworzenia nowego wątku i natychmiastowego jego uruchomienia. Sposób wywołania wygląda bardzo podobnie...
Programowanie rozproszone 2649 dni, 15 godzin, 13 minut temu 282 źrodło rozwiń
Tworząc nowe zadania (wątki) za pomocą TPL, możemy przekazać parametry AttachedToParent lub DenyChildAttach. Określają one, czy wątek powinien być podłączony do rodzica czy nie. W dzisiejszym wpisie postaram wyjaśnić się, czym one różnią się. Parametry definiują relację wątku z nadrzędnym wątkiem. Jeśli wątek A, tworzy kolejny wątek B, wtedy za pomocą powyższych wartości możemy określić relacje wątku B z A. Spróbujmy zatem wyjaśnić jak ta relacja wpływa na...
Programowanie rozproszone 2649 dni, 15 godzin, 13 minut temu 64 źrodło rozwiń
Postanowiłem kiedyś stworzyć, na własne potrzeby, spis narzędzi dla TDD dla .NET. Z czasem, lista rozrosła się do narzędzi nie tylko związanych z TDD, ale także z testami akceptacyjnymi i BDD. Dokończyłem ten spis o pozostałe rodzaje testów i opublikowałem na GitHubie, tak żeby można było łatwiej aktualizować.
Sztuka programowania 2651 dni, 23 godziny, 51 minut temu 213 źrodło rozwiń
Odpowiednie rozbicie historii na taski ma kluczowy czynnik w powodzeniu projektu. Jeśli ta czynność jest źle wykonana – czas realizacji projektu się wydłuża, a w zespole rośnie frustracja bo nikt nie wie gdzie leży problem. Developerzy pracują w pocie czoła, PM skrupulatnie trzyma się metodologii prowadzenia projektu, a mimo to są opóźnienia (które niestety najczę...
Sztuka programowania 2651 dni, 23 godziny, 51 minut temu 412 źrodło rozwiń
Jeżeli zachodzi potrzeba żeby w naszej aplikacji chcemy mieć razorowe widoki, standardowa konfiguracja nie daje nam intelisense. Powoduje to, że czas stworzenia widoku znacznie się wydłuża, bo visual krzyczy nam błędami co chwilę i podkreśla wszystko na czerwono. Jest jednej sposób który pozwala załatwić sprawę...
TL;DR; - Opis jest długi bo sesji wiele, ale w skrócie podobało mi się i daję wydarzeniu 4.5/5. Czemu nie max? Żeby za rok było więcej głębszych technicznie sesji i większy klub na after-party.
Przemysław Walkowski Kolejna książka z mojej kolekcji opisuje najważniejsze wzorce projektowe z przykładami w C#. Autorem jest Steven John Metsker, przechodzi on przez wszystkie najważniejsze grupy wzorców projektowych takich jak wzorce interfejsów, odpowiedzialności, wzorce konstrukcyjne, wzorce operacji oraz wzorce rozszerzeń. Poniżej moja recenzja. Konkretnie Książka jest dość stara pierwsze wydanie miało miejsce w 2005 roku. Co prawda wzorce pro...
BlockingCollection jest specjalną kolekcją danych, przygotowaną do implementacji wzorca producent-konsument. Nakład pracy do implementacji tego wzorca jest minimalny z BlockingCollection. Nie musimy martwić się o synchronizację, sekcję krytyczną czy deadlock. Zacznijmy od razu od przykładu. Producent będzie wyglądać następująco...
Programowanie rozproszone 2658 dni, 4 godziny, 29 minut temu 339 źrodło rozwiń
Czasem tworząc aplikację wykorzystującą XAML, chcielibyśmy przekazywać dane pomiędzy poszczególnymi stronami. Niestety technologie Microsoftu nie są do tego dobrze przygotowane. Co prawda możemy zawsze wykorzystać jakiś globalny obiekt kontekstu, ale w praktyce jest to rozwiązanie nieefektywne. Możemy również wykorzystać foldery lokalne/roaming, który opisywałem tutaj, ale w pewnym sensie strzelamy tutaj do muchy z armaty. Czy można to zrobić jakoś prosto i elegancko? Okazuje się, że tak - choć po części...
Mobile development 2658 dni, 4 godziny, 29 minut temu 201 źrodło rozwiń
W kilku poprzednich postach pisałem o tym jak powinna wyglądać czysta i przejrzysta architektura aplikacji. Kluczową rzeczą w takiej architekturze jest jednokierunkowy przepływ wywołań od kontrolera do prezentera. Kłopot z taką architekturą pojawia się, gdy mamy narzucaną architekturę w której naszym punktem wejścia do obsługi zdarzenia jest metoda, która musi zwrócić wynik poprzez return...
Architektura 2661 dni, 4 godziny, 45 minut temu 363 źrodło rozwiń
Przemysław Walkowski Słowo kluczowe var wprowadzone w C# 3.0 pozwala w codziennej pracy programisty .NET unikać definiowania typów danych, zrzucając odpowiedzialność na ustalenie typu kompilatorowi. W większość przypadków kompilator domyśla się jaki typ ma mieć dana zmienna i życie toczy się dalej. Jednak z czasem można zauważyć pewne efekty uboczne w czytelności kodu. Poniżej moje przemyślenia na temat var. Wstęp Słowa kluczowe var powst...
Sztuka programowania 2661 dni, 4 godziny, 45 minut temu 370 źrodło rozwiń
Dług technologiczny jest zaciągany wtedy, gdy mając na szali krótszy czas developmentu i jakość kodu – świadomie wybieramy szybsze/tańsze ukończenie projektu kosztem jakości. Warto powiedzieć, że jeśli ta droga nie jest świadoma to nie mamy do czynienia z długiem technologicznym tylko niekompetencją :)
Sztuka programowania 2661 dni, 4 godziny, 45 minut temu 314 źrodło rozwiń
O asynchronicznych kontrolerach pisałem już na blogu, zarówno w czystym ASP.NET jak i ASP.NET MVC. Czasami jednak chcemy zaimplementować model na wzór “fire&forget”. Oczywiście do tego, dużo bardziej nadają się systemy kolejkowe typu nServiceBus, ale dla bardzo prostych przypadków wystarczy odpalenie wątku i wykonanie jakieś czasochłonnej operacji. Przez czasochłonną mam na myśli taką, która wykonuje się kilka minut, a nie kilka godzin. Jeśli mamy aż tak skomplikowane operacje, wtedy wykonywanie teg...
Dziś miałem przyjemność uczestniczyć w konferencji ShareCon365, a tym samym zgodnie z dobrym obyczajem pora na kilka słów po. Co mi się rzuciło w oczy, zresztą nie po raz pierwszy w tym przypadku, to to, że ta konferencje była organizowana zdecydowanie przez Microsoft, jak i jego partnerów. Nie pozostało to oczywiście bez wpływu na jej kształt...
Estymowanie projektów IT to trudne zadanie. Najczęściej w estymowaniu chodzi o to, by trafić jak najbliżej faktycznej ceny projektu, by popełnić jak najmniejszy błąd. Okrągłe liczby kłamią! Znakomicie widać to podczas wyceny projektów, kiedy projekt jest oszacowany na 10, 50, 100, 200 tysięcy to najprawdopodobniej mamy do czynienia z niedoszacowaną lub przeszacowaną wyceną. Opiszę bł...
Domyślnie tworząc aplikacje uniwersalne, możemy korzystać z rozbudowanego modelu zdarzeń. Każde ze zdarzeń, może zostać zaimplementowane w tzw. części code-behind wybranej strony/kontrolki. Nie wszystkim do końca odpowiada jednak ten model. Spore grono programistów jest zwolennikiem architektury MVVM, która promuje wydzielone konstrukcje zwane ViewModelami. Ważnym elementem ViewModel są komendy, które pozwalają na realizację określonych zadań. Niestety nie wszystkie kontrolki Microsoftu są do tego dobrze...
Mobile development 2664 dni, 4 godziny, 43 minuty temu 60 źrodło rozwiń
Resharper daję naprawdę cenne wskazówki. Nie wszystkie są oczywiste i czasami należy zagłębić się w temat. Jedną z takich wskazówek jest używanie IndexOf wraz z StringComparison.Ordinal. Załóżmy, że mamy następujący kod: string text = "test"; Console.WriteLine(text.IndexOf("est")); Resharper zasugeruje konwersję do: string text = "test"; Console.WriteLine(text.IndexOf("est", StringComparison.Ordinal)); Dlaczego? Jeśli nie przekażemy ustawień regionalnych jawnie, wtedy domyślnie aktualna zost...
Sztuka programowania 2664 dni, 4 godziny, 43 minuty temu 163 źrodło rozwiń