poniedziałek, 17 stycznia 2011

PG.NET XXXI spotkanie grupy

Chciałbym Was serdecznie zaprosić na 31-te spotkanie Poznańskiej Grupy .NET, które odbędzie się w czwartek 20 stycznia 2011 o godz. 18:00 w siedzibie firmy Cognifide (Aleja Wielkopolska 4, Poznań).

W ramach spotkania zostaną poprowadzone dwie sesje:

  1. CodeRush 101 (Przemysław Włodarczak)
  2. Problemy związane z wymaganiami w projektach IT: jak je zidentyfikować i jak rozwiązywać? (Jakub Jurkiewicz):

Udział w spotkaniu jest bezpłatny, a rejestracja uczestników znajduje się tutaj: http://grupy.codeguru.pl/pgdotnet/CalendareventList/1,19934.aspx.

czwartek, 2 grudnia 2010

ASP.NET MVC na 30 spotkaniu PG.NET

Zapraszam wszystkich na 30 (niezła, okrągła liczba) spotkanie Poznańskiej Grupy .NET, które odbędzie się w czwartek 2 grudnia 2010 o godz. 18:00 w siedzibie firmy Cognifide (Aleja Wielkopolska 4, Poznań) - na której zaprezentuję Wam platformę ASP.NET MVC. Prezentacja będzie miała charakter wprowadzającą - rozjaśniający: czyli będziemy krok po kroku poznawali najważniejsze elementy ASP.NET MVC wersji 2, a także udogodnienia, które będzie (bo nie wydana jeszcze oficjalnie) zawierała w sobie trzecia wersja ASP.NET MVC

Rejestracja na spotkanie jest bezpłatna: Rejestracja @ Codeguru.pl

niedziela, 24 października 2010

StructureMapControllerFactory w ASP.NET MVC

Standardowa implementacja fabryki kontrolerów StructureMapControllerFactory może spowodować serię wyjątków zgłaszanych podczas próby utworzenia konkretnego kontrolera dla bieżącego żądania Http. Dzieje się tak dlatego, że domyślna tablica routingu aplikacji nie wyklucza przetwarzania plików statycznych takich jak np. favicon.ico – jest on wykorzystywany w standardowym template dla aplikacji ASP.NET MVC 2. Efekt tego jest taki, że podczas implementacji aplikacji wygenerowanej z tego template otrzymujemy wyjątek:

System.ArgumentNullException was caught
  Message=Value cannot be null.
Parameter name: key
  Source=mscorlib
  ParamName=key
  StackTrace:
       at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
       at System.Collections.Generic.Dictionary`2.ContainsKey(TKey key)
       at StructureMap.Util.Cache`2.get_Item(KEY key)
       at StructureMap.BuildSession.CreateInstance(Type pluginType)
       at StructureMap.Container.GetInstance(Type pluginType)
       at StructureMap.ObjectFactory.GetInstance(Type pluginType)
       at Komstar.Domains.Web.StructureMapControllerFactory.CreateController(RequestContext requestContext, String controllerName) in D:\…\…\Global.asax.cs:line 64
  InnerException:

Aby rozwiązać ten problem należy dodać do routingu aplikacji następujący wpis:

routes.IgnoreRoute("{favicon}", new { favicon = @"(./)?favicon.ico(/.*)?" });



Teraz powinno być cicho.


środa, 9 czerwca 2010

Visual Studio 2010 Pro Power Tools i problem z czarną skórką

Ukazała się pierwsza wersja świetnego dodatku do Visual Studio: Visual Studio 2010 Pro Power Tools. Nie chcę się powtarzać bo opis funkcjonalności można przeczytać np. tutaj. Jednak zauważyłem problem w przypadku czarnych schematów kolorów IDE, których jestem zwolennikiem. Największy problem jest z jednym z ciekawszych ficzerów, a mianowicie kolorowaniem parametrów metod w oknie podpowiedzi. U mnie sprawa wyglądała następująco:

darktheme

Na szczęście udało mi się znaleźć rozwiązanie problemu. Należy wejść w: Tools->Options->Fonts and Colors->Signature Help Tooltip Background oraz odpowiednio ztuningować kolor tła i czcionek zgodnie z własnymi upodobaniami :-)

Hołp dis help ;-)

czwartek, 3 czerwca 2010

extendedProtectionPolicy spowoduje, że Twoja aplikacja przestanie działać, czyli WCF + Windows 7 = CRASH

Straciłem ostatnio ładnych kilka godzin namierzając problem, który skutkował kompletnym zamknięciem się aplikacji zaraz po jej starcie. Co ciekawe problem pojawiał się jedynie na komputerach produkcyjnych: u mnie działało :-)

Otóż jeśli tworzysz dowolnego klienta WCF i posiadasz system Windows 7 jest niemal pewne, że Twój klient nie uruchomi się na innych systemach operacyjnych! Dlaczego? Problem tkwi w elemencie extendedProtectionPolicy, który “potajemnie” dodawany jest do pliku App.config.

Więc jeśli Twoja aplikacja kończy działanie błedem zaraz po stworzeniu obiektu proxy dla klienta WCF i nie masz pojęcia o co chodzi, to rozwiązaniem jest usunięcie tego elementu z pliku App.config.

Mnie uratowała sesja z WinDbg, gdyż obiekt proxy miałem tworzony z kontenera StructureMap zaraz na początku w mojej aplikacji i nijak nie szło zdiagnozować problemu na komputerach produkcyjnych na których nie było żadnego środowiska programistycznego. Jednocześnie przekonałem się jak zaciemnić debugowanie może zastosowanie IoC.

sobota, 29 maja 2010

NDepend 3 wchodzi na scenę!

O wersji v2 NDependa pisałem we wcześniejszym poście, jednak na sporo więcej uwagi zasługuje najnowsza, trzecia wersja tego narzędzia.

Co nowego w NDepend?

Największą i dla mnie osobiście najbardziej przydatną nową funkcjonalnością jest pełna integracja z Visual Studio 2005/2008/2010 IDE. Jeszcze nigdy używanie NDependa nie było tak naturalne w procesie tworzenia oprogramowania. Integracja wprowadza zupełnie nowy sposób pracy z kodem, gdyż do tej pory (przynajmniej w moim przypadku), statyczna analiza kodu przez NDependa była najefektywniejsza w połączeniu z Continuous Integration (analiza przeprowadzana przez VisualNDepend była przeprowadzana wyrywkowo, jak mi się przypomniało). Integrację z Visual Studio uważam za doskonały pomysł i nie spodziewałem się, że może być ona tak pomocna!

Jak to wygląda w praktyce?

Zacznijmy od zainstalowania dodatku do VisualStudio, który pozwoli na integrację NDependa z VS. Po uruchomieniu VisualNDepend.exe klikamy na przycisk instalacji:

ndepend install adin 

Po czym wybieramy do jakiego środowiska ma być wykonana integracja oraz jej typ.

install adin 2

Do wyboru mamy: pełną integrację oraz integrację light. Integracja light polega na tym, że z poziomu Visula Studio będziemy wykonywać polecenia np. CQL (Code Query Language), które zostaną przesłane i uruchomione w otwartej osobno instancji VisualNDependa. Moim zdaniem instalacja light sprawdza się najlepiej na komputerach z niewielkimi monitorami. Mnogość okien NDependa wymaga sporej powierzchni do pracy, a gdzieś jeszcze trzeba znaleźć miejsce na wyświetlenie kodu :-) Jeśli jednak dysponujemy nieco większym ekranem, a już najlepiej dwoma, trzema, czterema, (ma ktoś pięć???) monitorami, wtedy wersja Full będzie najlepszym wyborem.

Analizę czas zacząć

Do celów edukacyjnych przeanalizujmy zobaczmy NDependa trójkę w akcji. Jak mięso armatnie użyję biblioteki Sharpy. Sharpy to implementacja ASP.NET MVC ViewEngine podobna do Smarty dostępnego dla PHP. Jednak w tym momencie nie jest to istotne. Po załadowaniu źródeł należy podłączyć NDependa do otwartego pliku solution, co czynimy bezpośrednio z poziomu menu VisualStudio (przed samym załadowaniem należy wykonać Build projektu):

attach

W tym momencie NDepend automatycznie przeskanuje projekty i zaproponuje je do analizy (przypominam, że wersji v2  trzeba było “ręcznie” utworzyć projekt) i to już pierwsze, ogromne udogodnienie:

attach 2

Oczywiście nic nie stoi na przeszkodzie, aby dołączyć kolejne pliki, które nie znajdowały się w naszym solution. Upewniamy się, że checkbox “Run Analysis Now!” jest zaznaczony, po czym pozostaje kliknąć przycisk OK.

Po wykonaniu analizy NDepend generuje raport HTML, który pozwala na szybkie przejrzenie stanu w jakim znajduje sie kod, reszta szczegółów znajduje się już w IDE. Szybki przegląd uzyskamy za pomocą żółtego oka węża (a co!) znajdującego się w prawym, dolnym rogu IDE:

yellow

Po dwukliku na nim oczom naszym ukazuje się CQL Query Explorer:

cql

NDepend Search

NDepend Search, to kolejny feature, który jest mega użyteczny. Mimo, że VS 2010 wprowadza możliwość “inteligentnego” wyszukiwania po nazwie metod, to NDepend Search (wywalasz z menu NDepend/NDepend Search) potrafi wyszukiwać po nazwie metody, typach, polu, assembly, przestrzeni nazw, a na dodatek pokazuje w oknie wyszukiwania złożoność danej metody / typu, a przy tym działa bardzo szybko!

search

Gdy jednak potrzebujemy bardziej rozbudowanego wyszukiwania pod względem złożoności wystarczy zaznaczyć po polu wyboru Serach by “Complexity”, a do dyspozycji będziemy mieli opcje służące do szybkiego odfiltrowania interesującej nas skali złożoności:

search 2

NDepend Class Browser + podgląd na żywo

Kolejnym przydatnym okienkiem jest NDepend Class Browser, który oprócz swojej podstawowej funkcjonalności jaką jest ułatwienie nawigowania po klasach i ich składowych, dodatkowo komunikuje się z pozostałymi oknami np. Dependency Matrix, Metrics itd, dzięki czemu po najechaniu na klasę w oknie Class Browser-a otrzymujemy informację np. o jej zależnościach w oknie Dependency Matrix:

class browser

Podsumowanie

Nowa wersja NDepend-a wnosi rzuca zupełnie inne światło na to narzędzie. Dzięki doskonałej integracji ze środowiskiem programistycznym pozwala na uruchomienie analizy w dowolnym wręcz momencie, a dodatkowe funkcjonalności takie jak chociażby wspomniany NDepend Search znacznie przyśpieszają codzienną pracę ze złożonym kodem. Sporo wody w Warcie upłynie zanim Visual Studio będzie wyposażone w taki kombajn.

Strona NDepend.com

NDdepend Features

Obsługa prawna Poznań

środa, 26 maja 2010

Użyteczny skrypt w Powershell

Jak za pomocą skryptu powłoki Powershell skompilować pliki solution znajdujące się w bieżącym folderze i jego podfolderach? Oto skrypcik, który do tego wykorzystuję:

foreach($file in get-childitem -filter *.sln -recurse)
{
echo Kompiluje $file.FullName
\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe /t:build /p:Platform="Any CPU" /v:q /nologo $file.FullName
}

Czyli skrypt doskonale nadaję się do tzw. buildAll :-)